2010-09-22 55 views
6

我的程序的某些部分速度很慢。我想知道是否有我可以使用的工具,例如它可以告訴我確定運行methodA()花了100毫秒,等等...或類似的有用信息。任何說明每種方法運行需要多長時間的工具?

+3

它被稱爲[Profiler](http://stackoverflow.com/search?q= [c%23] + profiler)。 – dtb 2010-09-22 20:46:42

+1

你在找什麼叫做分析器。 – GrandmasterB 2010-09-22 20:46:50

+2

可能的重複[什麼是一些好的.NET分析器?](http://stackoverflow.com/questions/3927/what-are-some-good-net-profilers) – dtb 2010-09-22 20:47:05

回答

8

System.Diagnostics命名空間提供了一個名爲Stopwatch一個有用的類,它可用於代碼的時間部分(認爲它是一個「窮人的仿形」)。

這是你將如何使用它:

Stopwatch stopwatch = new Stopwatch(); 
stopwatch.Start(); // Start timing 

// This is what we want to time 
DoSomethingWeSuspectIsSlow(); 

stopwatch.Stop(); 
Console.WriteLine("It took {0} ms.", stopwatch.ElapsedMilliseconds); 
+3

或者,創建一個實現idisposable的類,它在構造時啓動定時器,在處置時停止和寫入。然後你可以通過用using語句包裝它來計時任何代碼塊! – 2010-09-22 21:02:34

+1

還要確保在計時之前至少調用了該方法一次,以便您不測量JIT編譯的時間。 – 2010-09-22 21:05:06

+0

@John Gardner - 你的構造對於從正在運行的Prod系統中獲得執行時間也非常有用。使用標識它們的標籤累積工作項目部分的時間,並在工作項目結尾處傾倒。 – 2010-09-22 21:05:13

3

這些類型的應用被稱爲「探查」

這裏有一個例子:example

12

如果您使用Visual Studio Team System中存在「性能工具」一個內置的分析器。這裏有很多有用的背景,this blog

我發現這在識別20% of my code that runs 80% of the time時非常有用,因此我應該擔心優化。

另一個令人驚訝的有效的簡單技術是在調試器中運行你的發佈代碼,並且在你正試圖診斷的「繁忙」狀態下中斷它幾次(大約10次就足夠了) 。您可能會發現經常性的調用堆棧信息,這些信息會將您引導至常見的關注區域。 80/20規則也是有效的。

+1

+1我一直在使用該中斷方法因爲在配置文件被構思之前。我很困惑,很少有人知道它。我想說它實際上確定了所關注的領域,而80/20規則更像99.9/0.1 – 2010-09-23 01:58:02

+0

不幸的是,80/20鏈接是特別真實的。 – 2010-09-23 12:38:05

+0

@Mike Dunlavey--你有更好的嗎?如果是的話,我會編輯。謝謝 – 2010-09-23 13:00:52

2

見我們SD C# Profiler。它可以自己和/或其所有被調用者提供該功能的功能定時。

相關問題