2013-04-05 97 views
2

我創建了一個讀取文件並獲取文件的元數據的應用程序。當我啓動應用程序時,私人工作集約爲8MB(如在任務管理器中查看)。當我掃描文件時,內存最高可達150MB並保持在那裏。如果我使用應用程序的相同實例添加其他文件,則內存將堆積。要理解這種行爲,我用了一個內存分析器(紅色大門),這表明我下面的統計數據: -在.NET中查找非託管內存泄漏應用程序

退出Private工人設置內存

  • 非託管內存的150MB的:94MB
  • 其他資源(字符串,數組等):30MB

這使我感到困惑,因爲我沒有使用任何不受管理的代碼或任何Pinvoke調用。我也嘗試過GC.Collect(),但沒有成功。

有人能指導我如何減少我的應用程序的非託管內存使用情況,以及可能的原因是什麼。

由於提前

+0

如果您可以使用Reg Gates內存分析器,那麼我建議您查看保留圖以查看誰擁有未發佈的內存。 – ken2k 2013-04-05 08:17:10

+0

筆刷或筆(Winforms)在RedGate中被視爲非託管代碼,因爲它們是本地筆刷或筆的句柄。 – 2013-04-05 08:18:10

+1

您正在使用大量非託管代碼並進行拼接。當您在非託管操作系統上運行託管代碼時,這是不可避免的。由微軟編寫的Pinvoke代碼,不是你。關注您在使用中看到的託管類。 – 2013-04-05 08:29:48

回答

4

最近更新螞蟻顯示哪些.NET類應用程序的非託管的內存使用。在設置屏幕中啓用非託管內存分析後,導航到類列表並按新的「非託管大小」列進行排序。

雖然您可能沒有有意使用非託管內存,但許多.NET Framework庫確實使用本機資源 - 例如映像庫。

+0

(我爲紅門btw工作) – 2013-11-05 10:26:57

+0

謝謝你,我在這個主題上到處搜索。現在我的程序從最後一個版本開始使用近2個內存,最多隻能使用350 megs。 – 2016-10-19 14:51:55