【发布时间】:2011-03-11 20:38:32
【问题描述】:
我希望有人能阐明 .NET 在以下情况下如何处理垃圾收集。
我有一个程序,我需要执行一种非常特殊的“在文件中查找”功能,就像您在 Visual Studio 中看到的那样。我必须搜索可能数千个文件,并将结果收集到一个 List(Pair()) 对象中,其中 Pair 是我创建的一个简单类,用于存储一对项目(显然)。
当我使用完我需要的东西时,我会在列表中调用 Clear() 以清除旧信息。这似乎无助于释放内存,因为我可以在任务管理器中看到消耗的内存并没有减少。
对于一个非常大的搜索,我可能要处理需要处理的 5,000,000 行信息(我的机器上大约 500MB 的内存使用量)。当我的搜索完成时,内存消耗水平保持不变。我让我的 Pair 类实现了 IDisposable,但这并没有帮助。
知道我可能缺少什么吗?谢谢!
【问题讨论】:
-
你在 Pair 对象中存储了什么?您只是存储文件路径还是实际上持有某种原生资源(如文件句柄?)
-
调用“GC.Collect()”将强制垃圾收集运行。这应该可以帮助您立即查看清理了多少内存。然而,只使用 GC.Collect() 来调试这个问题 - 不要把它留在你的代码中,除非你绝对确定它应该在那里!
标签: c# .net data-structures memory-management garbage-collection