2012-10-09 57 views
0

我的應用程序有10個鋸齒陣列和5個列表。平均值填充不同的數據,例如double或string類型。所以我知道我的應用程序必須消耗大量內存,但是如何確定正在使用的內存總量?如何確定我的應用程序使用的退役內存?

我已閱讀使用GC.GetTotalMemory,所以我做的第一件事是這樣的:

var initialMemory = System.GC.GetTotalMemory(true); 
many line of code 
... 
.. 
var finalMemory = System.GC.GetTotalMemory(true); 
var consumption = finalMemory - initialMemory; 

所有的代碼是main()稱他的功能的功能裏面,但最終的結果是零。我看到finalMemory也是零,那麼首先是怎麼回事?初始記憶有一個數字,但最後沒有。

System.GC.GetTotalMemory是找出我的應用程序使用的內存總數的最佳選擇嗎?

+1

GC只知道託管內存,它只是應用程序使用的內存的一部分。 –

+1

您可以使用WMI通過WMI進行搜索以獲得Total Memory – MethodMan

+0

對於性能分析,我強烈建議使用Red Gates內存分析器:http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/ – dmck

回答

0

你可以這樣做:

using System.Diagnostics; 

... 
    Process.GetCurrentProcess().VirtualMemorySize64 

這會給你,你會像在任務管理器中看到的地方的數量。但是,這包括非託管開銷內存使用情況。 System.GC.GetTotalMemory(true)將爲您提供垃圾收集器正在使用的實際內存量(.net內存使用量)。

1

我曾經用:
在我的Global.asax文件:

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    if (WebConfigSettings.ShowMemoryUsage) 
    { 
     GC.Collect(); 
     logger.Debug(string.Format("Total memory: {0:###,###,###,##0} bytes", GC.GetTotalMemory(true))); 
    } 
} 
+0

Just fyi,如果你將'true'傳遞給GetTotalMemory('true'參數意味着返回之前的一個集合),則不需要收集。 – CrazyCasta

相關問題