C# 使用性能监视器的Microsoft Excel互操作内存泄漏测试

C# 使用性能监视器的Microsoft Excel互操作内存泄漏测试,c#,.net,excel,memory-leaks,performance-monitor,C#,.net,Excel,Memory Leaks,Performance Monitor,我正在windows服务应用程序中使用Microsoft Excel interop生成Excel报告。因为我使用的是互操作程序集,所以需要确保没有内存泄漏 我试图通过处理(关闭、退出、分配null)所有excel互操作组件(如工作表、工作簿、excel应用程序)来处理代码中的内存泄漏。但我想确认处理内存泄漏场景的修复程序是否正常工作 为此,我使用性能监视器工具并添加了指向性能监视器的windows服务计数器的.Net CLR互操作。但是,我不确定如何确认或验证定义的度量,例如存根的度量、CCW

我正在windows服务应用程序中使用Microsoft Excel interop生成Excel报告。因为我使用的是互操作程序集,所以需要确保没有内存泄漏

我试图通过处理(关闭、退出、分配null)所有excel互操作组件(如工作表、工作簿、excel应用程序)来处理代码中的内存泄漏。但我想确认处理内存泄漏场景的修复程序是否正常工作

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

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

您应该在性能监视器中观察“”,如果它持续增加,则表示您有内存泄漏

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


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

除了使用性能监视器之外,您还可以检查正在运行的进程。如果关闭/退出时所有内容都已释放,则
Excel.exe
过程将结束。如果没有,就不会。