.NET:监控对象的生命周期(出生/死亡/记忆)

时间:2010-12-17 17:19:36

标签: c# .net

问题:了解应用程序中创建的 所有 对象的出生/死亡/内存使用情况的最佳方法是什么?一生? (图形报告会更好)

为什么会出现这样的问题: 在其他许多方面,其背后的想法是揭示可能永远不会被垃圾收集器收集或导致内存故障的长生命对象(例如堆/堆栈问题等),并提供有价值的信息以有效地管理对象生命周期< br />
(我实际上只花了一整夜调试一个多线程应用程序,最后注意到“相信被处理/更新”的对象实际上仍然存活并粉碎了服务器内存。)< / em>的

VS2010 Performance Wizard&amp; Profiler可能是一个很好的首发...... 我偶然发现了一些以编程方式执行此操作的方法,但它涉及单独包装对象(艰苦而不是代码无缝)

我正在寻找看起来像这样的东西:

Application START[-----------------------------------------------------------]END
Object 1                [---------------------------]
Object 2                          [---------------------------]
Object 3           [-----------------------------------------------------]

2 个答案:

答案 0 :(得分:2)

米卡,

如您所知,您可以使用VS2010 Profiler(如果您有Visual Studio Premium或Ultimate)。有关详细信息,请参阅有关收集“对象生命周期”信息的MSDN页面。

请注意,与其他分析模式相比,此分析模式非常重要,您可能会发现收集的VSP文件非常大,除非您有一个相当专注的场景,而不是正在进行分析。

分析报告将以表格形式显示信息,但您可以将数据复制到Excel或您选择的其他程序中以进行进一步分析/制图。

免责声明:我使用Visual Studio分析器。

答案 1 :(得分:1)

有些工具可以做到这一点但不像图表那么容易。您需要了解这些工具。

免: CLR Profiler http://msdn.microsoft.com/en-us/library/ff650691.aspx

WinDbg中: http://www.microsoft.com/whdc/devtools/debugging/default.mspx

在Windbg中使用SOS或SOSEX扩展来分析.NET代码。

商业: 红门蚂蚁剖析器: http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/