【发布时间】:2011-04-13 12:28:45
【问题描述】:
用所需的字符串填充列表后,如果列表不再追加,是否应该调用trimexcess?
【问题讨论】:
用所需的字符串填充列表后,如果列表不再追加,是否应该调用trimexcess?
【问题讨论】:
加载列表后调用TrimExcess 可能会节省一些内存。但请记住,如果列表中的项目是引用类型(并且字符串是引用类型),那么您所节省的只是保存引用所需的内存。
因此,例如,如果您有一个分配给 2,000 个项目的 List(of String),而其中只有 1,000 个项目,则调用 TrimExcess 将为您节省 1,000 个引用占用的内存。在 32 位运行时是 4,000 字节,在 64 位运行时是 8,000 字节。
正如 Andrew Hare 所提到的,在加载将在内存中停留一段时间的列表后调用 TrimExcess 可能是件好事。如果您从列表中删除一大堆东西,您也可以考虑调用TrimExcess,然后您将保留该列表。但是对于同一个列表重复调用TrimExcess,除非它真的变得很大,否则只是在浪费时间。
【讨论】:
当然可以,但是keep in mind:
此方法可用于最小化 如果没有新的,集合的内存开销 元素将被添加到 收藏。 重新分配的成本 和复制一个大列表可以 然而,相当可观,所以 如果 TrimExcess 方法不执行任何操作 列表超过 90% 容量。
除非您发现大量分配和稀疏填充的列表占用了太多内存,否则我不会对此过于担心。
【讨论】: