2012-09-13 28 views
2

我需要找出簡單控制檯C#程序消耗的時間和內存。查找簡單控制檯C#程序消耗的內存

.NET框架時秒錶工具來滿足要第一個任務,

 Stopwatch sw = new Stopwatch(); 
     sw.Start(); 
     Process process = Process.GetCurrentProcess(); 
     long memoryUsedInBytes = process.WorkingSet64; 

     //do something    

     sw.Stop(); 
     Console.WriteLine(sw.Elapsed.Milliseconds + "ms elapsed.\n" + memoryUsedInBytes/1000 + " KB consumed"); 

我們有一些東西,因爲這在框架簡單,找到簡單的控制檯程序佔用的內存,而無需使用先進的診斷技術。

編輯:追加內存使用的代碼,如下回答,由Habib。

+1

任務管理器??? – Nahum

+0

@NahumLitvin:這給出了一個數字,它可能會或可能不會代表「內存消耗」,具體取決於您對內存使用的定義。 – MSalters

+0

這不會測量消耗的時間,而是測量時間。如果另一個更高優先級的進程在同一時間運行(並且內核不足),秒錶仍將運行,但程序不會運行。見Perf。計數器答案,也可以衡量所消耗的時間。 – MSalters

回答

3

您可能會收到當前process,然後使用屬性WorkingSet64您可以獲取以字節爲單位的大小。

Process.WorkingSet64 Property - MSDN

獲取的分配用於相關聯 過程物理存儲器的量。

此屬性可用於監視的計算機上的內存使用情況與 32位處理器或64位處理器。該屬性值爲 等同於該過程的工作集性能計數器。

Process process = System.Diagnostics.Process.GetCurrentProcess(); 
long memoryUsedInBytes = process.WorkingSet64; 
+0

使用Process.GetCurrentProcess()&GC.GetTotalMemory()在任何特定的代碼行處給出不同的值。而GetTotalMemory總是返回較少的值。運行示例的 – Abhijeet

+0

Process.GetCurrentProcess()返回8.3MB,而GC.GetTotalMemory()返回365KB。 – Abhijeet

+0

這是否意味着與特定時間由託管代碼分配的內存總量相比,爲進程分配的物理內存量包含更多項目? – Abhijeet

1
+0

根據上面發佈的超鏈接,「特別是,GC.GetTotalMemory()將爲您提供在特定時間由託管代碼分配的內存總量」。對此 – Abhijeet

+0

Simon使用Process.GetCurrentProcess()&GC +1。GetTotalMemory()在任何特定的代碼行處給出不同的值。而GetTotalMemory總是返回較少的值。對於示例運行,Process.GetCurrentProcess()返回8.3MB,而GC.GetTotalMemory()返回365KB。這是否意味着與特定時間託管代碼分配的內存總量相比,爲進程分配的物理內存量包含更多項目? – Abhijeet

2

.NET過程暴露出一個相當豐富的性能計數器。您可以使用Windows的性能監視器的計數器添加到圖表,無論是一般的內存計數器(字節分配和等)或.NET專用櫃檯,就像在每個GC代字節,這樣的:

enter image description here

+0

在win xp上定位.NET CLR內存計數器有困難。性能計數器絕對爲大型應用程序提供詳細的圖形分析,對於簡單的應用程序,它似乎更耗時:-) +1 – Abhijeet