【问题标题】:Trimexcess on List(Of t) in .net.net 中 List(Of t) 上的 Trimexcess
【发布时间】:2011-04-13 12:28:45
【问题描述】:

用所需的字符串填充列表后,如果列表不再追加,是否应该调用trimexcess?

【问题讨论】:

    标签: vb.net list methods trim


    【解决方案1】:

    加载列表后调用TrimExcess 可能会节省一些内存。但请记住,如果列表中的项目是引用类型(并且字符串是引用类型),那么您所节省的只是保存引用所需的内存。

    因此,例如,如果您有一个分配给 2,000 个项目的 List(of String),而其中只有 1,000 个项目,则调用 TrimExcess 将为您节省 1,000 个引用占用的内存。在 32 位运行时是 4,000 字节,在 64 位运行时是 8,000 字节。

    正如 Andrew Hare 所提到的,在加载将在内存中停留一段时间的列表后调用 TrimExcess 可能是件好事。如果您从列表中删除一大堆东西,您也可以考虑调用TrimExcess,然后您将保留该列表。但是对于同一个列表重复调用TrimExcess,除非它真的变得很大,否则只是在浪费时间。

    【讨论】:

      【解决方案2】:

      当然可以,但是keep in mind:

      此方法可用于最小化 如果没有新的,集合的内存开销 元素将被添加到 收藏。 重新分配的成本 和复制一个大列表可以 然而,相当可观,所以 如果 TrimExcess 方法不执行任何操作 列表超过 90% 容量

      除非您发现大量分配和稀疏填充的列表占用了太多内存,否则我不会对此过于担心。

      【讨论】:

      • 假设我在对象中有几百个列表,每个列表有约 500-2000 个字符串,每个字符串约 40 个字符。调用 trimexcess 不会有什么坏处吧?
      • 这取决于您想要调用它的频率以及应用程序的类型。你会每分钟调用它 100 次,不是真的,你会在从文件中加载列表一次之后调用它吗?大概。请记住,当内存不足时,列表的大小会翻倍,因此您很可能会有所收获 - 但 RAM 很便宜,尤其是即使有大约 8,000,000 个字符...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 2010-09-28
      • 1970-01-01
      • 2010-09-19
      • 2021-05-25
      • 1970-01-01
      相关资源
      最近更新 更多