我正在调查一个用作集成服务的Windows服务中的内存泄漏问题。
每次进行“doIntegration()”调用时,我都会看到内存使用量比调用前更高,并且每个调用会增加约0.5 MB。
我尝试使用PerfView来定位可能存在的内存泄漏。
故障排除方法:
1)在第一个doIntegraion调用之前拍摄堆快照
2)在doIntegration调用后拍摄堆快照
3)多次执行步骤2
4)检查每个调用中哪个方法/组增加了
5)使用单独快照上的差异来定位内存泄漏所在位置
我可以看到 LIB mscorlib!RuntypeType 是每次增加的方法/组。 当我尝试检查它指向的内容时,我得到以下结果:
固定句柄
.NET根
ROOT
我无法展开树的更多部分。
当我选择RefTree视图时,我能够看到更多内容。
根100%
.NET ROOT 100%
固定句柄70.6%
LIB mscorlib!RuntimeType 46%
LIB mscorlib!reflection .... 13.4%
静态变量30.7%
ns.ConfigurationSettings 59.5%
ns.Leaks.ConfigurationSettings -33.3%
我对几个快照进行了比较,唯一递增的方法/组是固定句柄,它们仅涉及mscorlib类型。
是否有其他人遇到过这样的问题?
我认为问题可能出在使用XMLSerializer从Model序列化到XML上,但我不太确定。
还有其他方法可以尝试查找内存泄漏吗?
谢谢 :)
每次进行“doIntegration()”调用时,我都会看到内存使用量比调用前更高,并且每个调用会增加约0.5 MB。
我尝试使用PerfView来定位可能存在的内存泄漏。
故障排除方法:
1)在第一个doIntegraion调用之前拍摄堆快照
2)在doIntegration调用后拍摄堆快照
3)多次执行步骤2
4)检查每个调用中哪个方法/组增加了
5)使用单独快照上的差异来定位内存泄漏所在位置
我可以看到 LIB mscorlib!RuntypeType 是每次增加的方法/组。 当我尝试检查它指向的内容时,我得到以下结果:
固定句柄
.NET根
ROOT
我无法展开树的更多部分。
当我选择RefTree视图时,我能够看到更多内容。
根100%
.NET ROOT 100%
固定句柄70.6%
LIB mscorlib!RuntimeType 46%
LIB mscorlib!reflection .... 13.4%
静态变量30.7%
ns.ConfigurationSettings 59.5%
ns.Leaks.ConfigurationSettings -33.3%
我对几个快照进行了比较,唯一递增的方法/组是固定句柄,它们仅涉及mscorlib类型。
是否有其他人遇到过这样的问题?
我认为问题可能出在使用XMLSerializer从Model序列化到XML上,但我不太确定。
还有其他方法可以尝试查找内存泄漏吗?
谢谢 :)