我在Windows服务应用程序中使用Microsoft Excel互操作来生成Excel报告。由于我使用互操作程序集,需要确保没有内存泄漏。
我试图通过处理(close,quit,assign null)所有excel互操作组件(如工作表,工作簿,Excel应用程序)来处理内存泄漏。但我想确认处理内存泄漏情况的修复程序是否正常工作。
为此,我使用了性能监视工具,并添加了指向性能监视器的Windows服务计数器的.Net CLR互操作。但是,我不确定如何确认或验证定义的指标,例如存根#,CCW数量。应该确定使用Microsoft Excel互操作库的Windows服务应用程序中没有内存泄漏的度量值应该是什么。
请使用性能监视器建议确认或计算没有内存泄漏的方法。
答案 0 :(得分:0)
你应该在性能监视器中看“Private Bytes”,如果它持续增加,那么就意味着你有内存泄漏。
你正在使用C#来调用excel,因此它应该是RCW(运行时可调用包装器,C#代码调用本机代码),而不是CCW(COM可调用包装器,本机代码调用C#代码)。一种内存泄漏来自这个包装器。您可以使用工具DebugDiag来跟踪内存泄漏,如果它显示某些泄漏来自“ole * .dll”,这意味着您有来自包装器的泄漏。 RCW和CCW都使用COM作为桥接器,COM使用引用计数来管理对象的生命周期,因此如果存在内存泄漏,通常意味着某个对象的引用计数不为零。
我花了我的最后一周来追踪CCW的内存泄漏,祝你好运!