簡體   English   中英

C#內存使用率

[英]C# memory usage

如何獲得C#應用程序中使用的實際內存?

  • 任務管理器顯示不同的指標。
  • Process Explorer顯示專用字節的使用增加。
  • 性能計數器(perfmon.msc)顯示了不同的指標
  • 當我使用.NET內存探查器時,它顯示大部分內存是垃圾回收的,並且只有很少的活動字節。

我不知道該相信哪個。

內存使用要比顯示一個或兩個數字復雜得多。 我建議您看看Mark Russinovich在Windows中各種計數器上的出色文章

.NET只會使事情進一步復雜化。 .NET進程只是Windows的另一個進程,因此顯然它將具有所有常規指標,但除了CLR之外,它還充當托管應用程序的內存管理器。 因此,根據觀點,這些數字會有所不同。

CLR代表.NET應用程序有效地大塊分配和釋放虛擬內存,然后根據需要將一些內存分配給應用程序。 因此,盡管您的應用程序在給定的時間點可能只使用了很少的內存,但該內存可能已經釋放或可能尚未釋放到操作系統。

最重要的是,CLR本身使用內存來加載IL,將IL編譯為本地代碼,存儲所有類型信息等等。 所有這些都增加了進程的內存占用。

如果您想知道托管應用程序用於數據的內存量,則“所有堆中的字節數”計數器將非常有用。 專用字節可以用作進程級別上應用程序內存使用情況的某種粗略估計。

您可能還需要檢查以下相關問題:

減少.NET應用程序的內存使用量?

如何檢測內存泄漏在哪里?

如果使用的是VS 2010,則可以使用Visual Studio 2010 Profiler。 該工具可以為您創建非常有用的報告。

如果您想知道大約在GC堆上分配了多少字節(忽略運行時,JIT編譯器等使用的內存),則可以調用GC.GetTotalMemory 我們在跟蹤內存泄漏時使用了它。

下載VADump (如果尚未安裝)

用法: VADUMP.EXE -sop [PID]

那么,什么是“我的C#應用​​程序中使用的實際內存”?

得益於Windows和CLR中的虛擬內存和(幾個)內存管理層,這是一個相當復雜的問題。

從您提到的來源來看,CLR分析器將為您提供最詳細的細分,我認為這是最准確的。

但是沒有“單數”答案,應用A是否使用比B更多或更少的內存這一問題可能無法回答。

那么您實際上想知道什么? 您有具體的性能問題要解決嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM