0

我有一个执行由时间触发的批量插入的 Windows 服务。我正在使用sharp (contrib) 架构和NHibernate。服务的内存消耗似乎随着时间的推移缓慢/线性上升。我想调查是什么原因造成的。任何人都可以这么好心并推荐一个工具吗?谢谢。

4

1 回答 1

3

有商业分析器(ANTS ProfilerDotTrace等),还有出色的SOS 调试器扩展,您可以在 Visual Studio 或 WinDbg 中使用。有很多 关于如何使用 SOS的文章。 Tess Ferrandez 的博客是一个很好的调试资源。

通常,您将使用与此类似的 SOS。第一次运行:

!EEHeap

检查堆的状态,然后

!dumpheap -stat

查看泄漏对象的类型。从那里,您可以使用

!dumpheap -type <object type>

列出对象,然后

!gcroot <object address>

对于特定对象,查看哪些根使对象保持活动状态。

但是,在这种情况下,我总是从检查 GC 性能计数器开始,以了解泄漏模式,查看哪个堆正在增长等。

于 2013-10-03T10:21:08.297 回答