COM C#内存泄漏跟踪

时间:2009-02-05 21:15:16

标签: c# com memory-leaks

有没有办法使用com dll找出c#应用程序中每个dll的内存使用情况?或者你会说什么是找出为什么内存在使用com对象时呈指数级增长的最佳方法(IE。是否有COM对象有内存泄漏,或者是否必须释放一些特殊的对象传递给托管代码(和/或如何做))。

4 个答案:

答案 0 :(得分:2)

您是否在使用后释放COM对象(Marshal.ReleaseComObject)?

您传入/传出哪些参数?

如果您没有COM对象源代码并且想要确定其'泄漏'的原因,请运行COM对象outa proc,将WinDBG附加到进程并在内存分配API上设置断点(HeapAlloc等... )。查看调用堆栈和分配模式。当然你可以在管理方面使用分析器,但如果你想知道发生了什么,你将不得不弄脏你的手......

答案 1 :(得分:1)

Microsoft支持工程师拥有一个精彩的博客,可以浏览许多案例,例如this。她浏览了她使用的所有工具。几年前,当我调试这种东西时,我发现阅读她的所有帖子非常有帮助。

编辑:显然,她添加了一系列实验,解释如何设置环境并诊断不同的问题。您可能需要启动here

答案 2 :(得分:0)

dotTrace rock:http://www.jetbrains.com/profiler/

请记住,.NET中的所有COM对象基本上都是MarshalByRefObject派生的类,因此您应该能够通过一个可能的过滤器等对象来查找内存消耗。

答案 3 :(得分:0)

我想做的第一件事就是绝对肯定我没有在任何地方泄漏引用,然后进入重现步骤的最小步骤(一个好的分析器是必不可少的,我碰巧使用并推荐RedGate的{ {3}}) - 它可以完成,并且值得发送示例代码,将问题再现给COM对象的供应商,以便他们可以解决它(由于内存,实际上有一个Crystal Reports的修补程序在我发现的泄漏:)