2009-02-05 81 views
2

有没有办法找出使用COM DLL的C#应用​​程序内的每个DLL的内存使用情况?或者,你会说什么是最好的方法来找出为什么内存在使用com对象时呈指数增长(IE。COM对象是否有内存泄漏,或者是否有一些特殊的对象释放到托管代码中) /或如何做到这一点))。COM C#内存泄漏跟踪

回答

2

你使用后发布的COM对象(Marshal.ReleaseComObject)?

你传入/传出呼叫的参数是什么类型?

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

+0

希望,一个分析器会给你你需要的信息,更深。 – 2009-02-05 22:08:25

0

dotTrace岩石:http://www.jetbrains.com/profiler/

请记住,在.NET中所有的COM对象基本上是在心脏MarshalByRefObject的派生类,所以你应该能够通过这样的对象,寻找内存消耗作为一个潜在的过滤器。

1

微软支持工程师有一个神话般的博客,通过大量的例子this走过。她浏览了她使用的所有工具。当我几年前调试这些东西时,我发现读完她所有的帖子都非常有帮助。

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

0

我想要做的第一件事是绝对肯定的是,我不会在任何地方泄漏引用,然后进入重现步骤的最小步骤(一个好的配置文件是必不可少的,我碰巧使用并推荐RedGate的它可以完成,并且值得发送示例代码,将问题复制到COM对象的供应商,以便它们可以解决此问题(实际上,Crystal Reports的修补程序是由于其中的内存泄漏我发现:)