1

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

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

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

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

4

1 回答 1

0

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

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

我上周一直在跟踪 CCW 的内存泄漏,祝你好运!

于 2014-04-06T14:07:46.943 回答