2010-05-26 55 views
2

我剛剛使用FastMM4來檢測泄漏。我沒有意識到我們的應用程序正在使用泄漏事件句柄的DLL,因此我修復了FastMM4報告的任何泄漏,但沒有報告,因此沒有處理。Fastmm4和泄漏手柄

我的問題是,會不會有FastMM4有泄漏事件處理報告?這是否需要我用FastMM4重建dll?我還聽到有人提到ShareMM,我需要補充一點嗎?

我使用的Delphi2007,我認爲是使用borland內存管理器,如果是的話,我應該用fastMM4替換它嗎?有什麼步驟來做到這一點?

對不起,提出這麼多問題,我在看.net開發幾年後delphi。 JDD。

JD。

回答

7

不。FastMM是一個內存管理器,它只能報告應用程序通過FastMM分配的內存泄漏。句柄是對由Windows分配的系統對象的不透明引用,因此FastMM無法跟蹤它們,其他Delphi內存管理器也無法跟蹤它們。

這不是一個真正的Delphi與.NET的事情,因爲.NET的垃圾收集不可能比FastMM更好地解決這個問題。句柄是非內存資源,你必須防止它們以與.NET相同的方式泄漏:確保分配的任何東西在你完成時釋放它。

你知道你漏水的手柄是什麼類型嗎?如果它比普遍存在的HWND更不常見,那麼這將是追蹤問題的一個很好的起點:找到你在哪裏分配這種類型的句柄。

至於你的其他問題,關於德爾福2007年,它與內置FastMM,而不是老BorlandMM。但它是一種基本版本。要訪問FullDebugMode功能,您需要從SourceForge下載FastMM,並將其添加到您的使用列表的頂部,並使用定義的FullDebugMode編譯器進行重建。

+0

謝謝梅森。我們嘗試了Windbg,發現Event類型的手柄在泄漏。我設法修復它,因爲它在DLL中,現在它們已經停止泄漏。我聽說通常我們應該使用FastMM4.dll更好的內存管理,對於外地的應用程序,我應該用fastmm4.dll替換fastmm.dll,還是需要重新編譯我的代碼以引用fastmm4.pas等? – 2010-05-26 12:56:00

+0

我不知道有一個fastmm DLL。 FullDebugMode使用dll進行高級分析,但內存管理器本身只是一對pas文件和一個包含文件,基本功能內置於Delphi 2007中。只需在D2007下重新編譯,並且您的DLL將啓用FastMM,除非它明確使用替換內存管理器。 – 2010-05-26 13:21:34

+0

對不起,我的壞。好的,謝謝你提供的信息。 – 2010-05-28 14:07:29