根据C#对象查找进程内存分配的最佳方法是什么

时间:2010-06-17 07:25:18

标签: c# garbage-collection memory-management profiling

我已经编写了各种基于C#控制台的应用程序,其中一些应用程序长时间运行,但随着时间的推移会有很大的内存占用量。通过任务管理器查看windows perofrmance监视器时,同样的问题在我的脑海中不断出现;如何按类型划分数量对象,这有助于实现此足迹;哪些是可达到的,哪些是无法收集的。在很多情况下,我已经执行了代码检查,以确保我不会不必要地持有超过需要的对象并使用using构造处理对象。我最近也发现了在释放大量对象时使用CG.Collect方法(例如保存在刚刚清除的集合中)。但是,我不太确定这会产生那么大的差异,所以我抛弃了那些代码。 我猜测sysinternals套件中有工具可以帮助解决这些内存类型的静止但我不知道哪些以及如何使用它们。替代方案是支付第三方分析工具,如JetBrains dotTrace;但是我需要先确保我先解决了免费选项,然后再向我的经理提出。

1 个答案:

答案 0 :(得分:0)

CLR Profiler允许您查看各种对象图(我从未使用过它):

http://www.microsoft.com/downloads/details.aspx?FamilyID=86ce6052-d7f4-4aeb-9b7a-94635beebdda&displaylang=en

当然,ANTS Profiler(免费试用版)通常是推荐的分析器。您不需要手动垃圾收集,GC是一个非常智能的解决方案,可能比您执行的任何手动调用更优化。更好的方法是使用内存中保留的对象数量保持最低限度 - 如果内存优先,则尽快消除内存繁重的对象。