我在混合模式C++/CLR .NET應用程序中遇到內存泄漏緩慢的問題。混合模式C++/CLR應用程序中的內存泄漏
(鏈接到VS2008 C++/CLR的Windows窗體應用程序與 「/ CLR」 編譯器設置它的C++原生靜態庫)
典型行爲:應用程序開始使用30 MB(專用內存)。然後泄漏內存速度緩慢,例如在模擬重負載下運行時每小時一個MB。這模擬了應用程序在幾天或幾周內正在運行。
我一直在使用一些工具來跟蹤內存泄漏既包括隨Visual Studio的CRT庫的CRT調試的東西嘗試。我還使用了商業泄漏檢測工具(「Memory Validator」)。
兩個報告在關機時可忽略不計的內存泄漏(我不是擔心一些小的條目數量到幾KB)。另外,我可以看到在運行時,跟蹤的內存看起來不那麼重要(所以我不相信這只是內存,只在應用程序退出時釋放)。我獲得了大約5 MB的上市內存(總數> 30MB)。
所述的工具(存儲器驗證器)是設置跟蹤所有的內存使用情況(包括malloc的,新的,虛擬存儲器分配和一大堆其它類型的存儲器分配的)。基本上,每個設置的內存來跟蹤已被選中。
在.NET圖像報告它周圍使用1.5 MB的存儲器(從性能監視器)。
這裏是信息的最後一點:我們有一個版本,它運行作爲本地控制檯應用程序應用程序的(純天然 - 不CLR在所有)。除了沒有UI的東西外,這與混合模式的95%相同。這似乎並沒有泄漏內存,並在專用字節大約5MB處出現峯值。
所以基本上我試圖讓人們在這裏要說的是,我不認爲任何本地代碼的泄漏內存。
另一塊拼圖:我發現這個目標2.0框架(對此我),當是指內存泄漏在混合模式下的應用:http://support.microsoft.com/kb/961870
不幸的是,細節僵硬稀疏,所以我不知道這是相關的。我確實嘗試了針對3.5框架而不是2.0,但仍然有同樣的問題(也許我沒有這樣做)。
任何人有任何建議嗎?
幾件事情,可能會幫助我:
- 是否有任何其他種類的,我不是跟蹤內存分配的?
- 這些數字如何不加起來?我獲得了5 MB的CRT內存使用量,1.5 MB的.NET內存,那麼整個應用程序如何使用30 MB專用字節?這一切都綁在.NET框架?爲什麼我沒有看到這些泄漏工具? .NET框架不會顯示爲某種分配的內存嗎?
- 任何其他泄漏檢測工具,適用於混合模式應用程序?
感謝所有幫助
約翰
.NET 2.0和.NET 3.5都使用相同的CLR 2.0,因爲您可以從版本號輕鬆看到;-) – 2009-07-16 07:29:20