2008-12-17 14 views
5

多個併發線程現在,我們只需要使用這樣的事情你如何衡量代碼塊(線程)的執行時間與.NET

 stopWatch.Start();    
     try 
     { 
      method(); 
     } 
     finally 
     { 
      stopWatch.Stop(); 
     } 

,工作正常進行的同步方法,但也有一些異步執行,所以當多個線程正在執行時,時間會偏斜。是否有與System.Diagnostics.Stopwatch相當的功能,將只測量當前線程中的時間花費?

我們希望隨着時間在我們的內部測試版長一段時間(阿爾法?)發佈收集數據和一個剖析全職下運行是不是一個可行的選擇。爲了澄清,我們只想測量執行method()所花費的時間,所以如果Method1()和Method2()都在同一時間開始並且Method1在2秒標記處結束,並且Method2在我想要的東西會告訴我Method1花了大約1秒的時間執行,Method2花了大約3秒的時間執行(假設他們在前2秒內平均分享(假定的單核)處理器

+0

你是問在方法()對整個經過的時間花在處理器時間,因爲在()的方法正在執行其他線程所使用的CPU?或者是方法()啓動一些異步的東西,你想捕獲時間的一部分經過的時間? – 2008-12-17 16:55:39

+0

第一個。編輯澄清 – Davy8 2008-12-17 17:17:24

回答

1

秒錶應該測量只花在一個線程中的時間,你需要在每個線程上運行一個單獨的實例,這可能會讓你的結果更接近你想要的結果

或者(p如果您想監視整個應用程序,而不是某些方法),則可以使用各種性能計數器(它們由.Net運行時更新)。有很多在網絡上的信息,您可以用MSDN開始: http://msdn.microsoft.com/en-us/library/w8f5kw2e(VS.71).aspx

+0

秒錶測量實時過去可能不應該用在當前線程執行。我們爲每個線程創建一個新實例,但它沒有得到我們想要的。 – Davy8 2008-12-17 16:59:45

1

我曾經創造了秒錶包裝,有標記爲ThreadStatic秒錶實例解決了類似的問題。

或者有螞蟻探查器這樣的工具,你可以購買,以幫助您。