2010-11-17 75 views
3

我有一個大的.NET應用程序,目前正在打造一個865MB的私人工作集大小。堆vs託管堆

所以我跑了VMMap,看到Heap大約是587MB,Managed Heap只有255MB(也是私人工作集)。

所有這些非託管代碼使用如此多的內存(我認爲它正在被.net運行時使用)是正常嗎?

注意:我用WinDbg的SOS擴展名。問題不在於託管堆中的內存消耗,而是「非託管」堆。的VMMap的

截圖:http://img687.imageshack.us/img687/1529/vmmap.png

更多信息: 總大小:1487MB COMMITED:1359MB 個人:931MB 總WS:967MB 私人WS:865MB 免費(尺碼):609MB

提前致謝。

回答

0

是的!非託管對象如果沒有正確釋放,甚至會導致更多的內存泄漏。我曾經發現obcconnection對象吃了RAM的演出(它試圖在循環中打開/關閉連接)。以至於應用程序最終會失去內存並崩潰。

你在處理什麼非託管對象?

0

使用CLRProfiler(http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a362781c-3870-43be-8926-862b40aa0cd0&DisplayLang=en)查看堆上有什麼對象。

注意:.NET 2.0版本也適用於.NET 4.0。

+1

僅供參考,.NET 3.5使用CLR 2.0 - 它是4.0更新它 – 2010-11-17 22:36:55

+0

也許更輕量級和快速啓動是SOS http://msdn.microsoft.com/en-us/library/bb190764.aspx – user44298 2010-11-17 22:37:34

+0

@Richard謝謝,編輯。 – Nick 2010-11-17 22:38:55