我有一个Windows服务,可以执行由时间触发的批量插入。我正在使用sharp(contrib)架构和NHibernate。随着时间的推移,服务的内存消耗似乎缓慢/线性上升。我想研究是什么导致这种情况。有谁可以这么善良并推荐一个工具?感谢。
答案 0 :(得分:3)
有商业资料分析器(ANTS Profiler,DotTrace等),还有优秀的SOS debugger extension,可以在Visual Studio或WinDbg中使用。有many articles about how来使用SOS。 Tess Ferrandez' blog是一个很好的调试资源。
通常,您将使用与此类似的SOS。首先运行:
!EEHeap
检查堆的状态,然后是
!dumpheap -stat
查看泄漏对象的类型。从那里,你可以使用
!dumpheap -type <object type>
列出对象然后
!gcroot <object address>
对于特定对象,查看哪些根保持对象存活。
但是,在这种情况下,我总是先检查GC性能计数器,了解泄漏模式,看看哪个堆正在增长等。