【发布时间】:2012-04-09 21:34:33
【问题描述】:
有没有一种有效的方法可以将数组的部分内存返回给系统?
我正在使用 C# 遍历一个大字符串数组和一个包含(> 100k 个元素)的哈希表,并且在我完成它们后将单个元素设置为 null。我已经尝试在各个级别和整个循环中调用垃圾收集器,但它们都没有将内存返回给系统(完全调用垃圾收集器并等待挂起的终结器会导致我的代码变得非常缓慢且无响应)。
我曾考虑将数组拆分为 n 个部分,并在每个部分完成后调用 gc,但这看起来很乱
GC.Collect(1);
GC.Collect(2);
....
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
【问题讨论】:
-
可能最好的办法是让 GC 完成它的工作。将引用设置为 null 绰绰有余。
-
@HenkHolterman 好的 :) 我想问也无妨。如果我没有得到任何答案,我会删除问题:)
-
假设没有其他对对象的实时引用。此外,如果它们足够大,它们可能会被分配到大型对象堆上,并且您可能会看到碎片。
-
@caseyr547,完全没有必要删除问题...
-
@EdS。谢谢,如果它们位于大型对象堆上,那将是有意义的,我关于多个数组的想法会修复内存泄漏吗?
标签: c# arrays memory-management hashtable