Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
COM C#内存泄漏跟踪_C#_Com_Memory Leaks - Fatal编程技术网

COM C#内存泄漏跟踪

COM C#内存泄漏跟踪,c#,com,memory-leaks,C#,Com,Memory Leaks,有没有一种方法可以使用com dll找出c#应用程序中每个dll的内存使用情况?或者,您认为什么是找出为什么使用com对象时内存呈指数增长的最佳方法(即com对象是否存在内存泄漏,或者是否必须对传递给托管代码的对象进行某些特殊释放(和/或如何释放))。dotTrace rocks: 请记住,.NET中的所有COM对象本质上都是MarshallByRefObject派生的类,因此您应该能够通过一个潜在的筛选器来查找此类对象的内存消耗。一位Microsoft支持工程师有一个精彩的博客,其中介绍了许多

有没有一种方法可以使用com dll找出c#应用程序中每个dll的内存使用情况?或者,您认为什么是找出为什么使用com对象时内存呈指数增长的最佳方法(即com对象是否存在内存泄漏,或者是否必须对传递给托管代码的对象进行某些特殊释放(和/或如何释放))。

dotTrace rocks:


请记住,.NET中的所有COM对象本质上都是MarshallByRefObject派生的类,因此您应该能够通过一个潜在的筛选器来查找此类对象的内存消耗。

一位Microsoft支持工程师有一个精彩的博客,其中介绍了许多类似的情况。她检查了她使用的所有工具。几年前,当我调试这类东西时,我发现阅读她的所有帖子非常有帮助


编辑:显然,她增加了一系列的实验室,解释如何设置您的环境和诊断不同的问题。您可能想开始。

我想做的第一件事是绝对确定我没有在任何地方泄漏引用,然后进入将复制这些步骤的最小步骤(一个好的探查器是必不可少的,我碰巧使用并推荐RedGate)——这是可以做到的,值得向COM对象的供应商发送示例代码来重现问题,以便他们能够解决问题(由于Crystal Reports内存泄漏,实际上有一个热修复程序,我发现:)

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

您传入/传出调用的参数类型是什么


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

希望探查器能为您提供所需信息,以便深入了解。