我創建了一個讀取文件並獲取文件的元數據的應用程序。當我啓動應用程序時,私人工作集約爲8MB(如在任務管理器中查看)。當我掃描文件時,內存最高可達150MB並保持在那裏。如果我使用應用程序的相同實例添加其他文件,則內存將堆積。要理解這種行爲,我用了一個內存分析器(紅色大門),這表明我下面的統計數據: -在.NET中查找非託管內存泄漏應用程序
退出Private工人設置內存
- 非託管內存的150MB的:94MB
- 其他資源(字符串,數組等):30MB
這使我感到困惑,因爲我沒有使用任何不受管理的代碼或任何Pinvoke調用。我也嘗試過GC.Collect(),但沒有成功。
有人能指導我如何減少我的應用程序的非託管內存使用情況,以及可能的原因是什麼。
由於提前
如果您可以使用Reg Gates內存分析器,那麼我建議您查看保留圖以查看誰擁有未發佈的內存。 – ken2k 2013-04-05 08:17:10
筆刷或筆(Winforms)在RedGate中被視爲非託管代碼,因爲它們是本地筆刷或筆的句柄。 – 2013-04-05 08:18:10
您正在使用大量非託管代碼並進行拼接。當您在非託管操作系統上運行託管代碼時,這是不可避免的。由微軟編寫的Pinvoke代碼,不是你。關注您在使用中看到的託管類。 – 2013-04-05 08:29:48