2009-02-05 84 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的修補程序是由於其中的內存泄漏我發現:)