首页 文章

使用性能监视器的Microsoft Excel Interop内存泄漏测试

提问于
浏览
1

我在Windows服务应用程序中使用Microsoft Excel互操作来生成Excel报告 . 由于我使用的是互操作程序集,需要确保没有内存泄漏 .

我试图通过处理(close,quit,assign null)所有excel互操作组件(如工作表,工作簿,excel应用程序)来处理内存泄漏 . 但我想确认处理内存泄漏方案的修复程序是否正常工作 .

为此,我正在使用性能监视工具并添加.Net CLR interop指向性能监视器的Windows服务计数器 . 但是,我不确定如何确认或验证定义的指标,例如#stubs,#CCWs . 应该可以确认使用Microsoft Excel互操作库的Windows服务应用程序中没有内存泄漏的度量值应该是什么 .

请建议使用性能监视器确认或计算没有内存泄漏的方法 .

1 回答

  • 0

    您应该在性能监视器中观看“Private Bytes”,如果它持续增加,那么这意味着您有内存泄漏 .

    您使用C#调用excel,因此它应该是RCW(运行时可调用包装器,C#代码调用本机代码),而不是CCW(COM可调用包装器,本机代码调用C#代码) . 一种内存泄漏来自这个包装器 . 您可以使用工具DebugDiag来跟踪内存泄漏,如果它显示某些泄漏来自"ole*.dll",这意味着您有来自包装器的泄漏 . RCW和CCW都使用COM作为桥接器,COM使用引用计数来管理对象的生命周期,因此如果存在内存泄漏,通常意味着某个对象的引用计数不为零 .

    我花了我的最后一周来追踪CCW的内存泄漏,祝你好运!

相关问题