2014-04-20 90 views
2

在我的應用程序中,我正在執行一個新的.NET線程,並在該線程中執行任務。用C#測量線程的執行時間

我使用秒錶來衡量執行時間,但秒錶測量OS的所有線程的執行時間(螺母只是我的線程的執行時間)。我想要一種方法來衡量我創建的線程執行自己的指令所需的時間。

有沒有這種在.NET中測量的方式?

+1

檢查http://stackoverflow.com/questions/7598810/precisely-measure-execution-time-of-code-in-thread-c – mostruash

回答

3

無法在託管代碼中執行此操作,但可以使用PInvoke QueryThreadCycleTimeGetThreadTimes。有一點需要記住 - 沒有要求管理線程和本地線程之間必須存在一對一的關係,但據我所知,這是它目前的工作方式。使用Stopwatch,您將始終獲得延遲的掛鐘時間,包括線程暫停時的時間。

+0

在谷歌搜索使用您的建議GetThreadTimes我發現這篇文章在Codeproject http://www.codeproject.com/Articles/31152/ExecutionStopwatch。那麼,你認爲這只是計算我線程的執行時間? – drill

+0

是的,這應該返回操作系統爲特定線程記錄的執行時間。 –

+0

我剛剛實現它。現在,我懷疑。我可能是錯的,但如果我用相同的輸入多次執行相同的算法,不應該GetThreadTimes總是給我相同的時間?因爲每次它給我不同的時間價值。差別很小,但根據我的說法,它總是給我相同的時間價值!也許我錯了。 – drill

-1

此代碼衡量一個線程的執行時間:

void ThreadMethod() { 
    Stopwatch sw = Stopwatch.StartNew(); 
    SomeActions(); 
    vat time = sw.Elapsed; 
} 

運行你的線程中的方法,你會得到你的執行時間。

+3

...但讓我們假設線程正在執行時,從OS(一個重載CPU的大型應用程序)開始了一項新的應用程序。在這種情況下,該線程也將停止工作以處理CPU的某些「滴答聲」。在這種情況下,秒錶是否會測量適當的線程時間,還是會受到CPU其他線程的影響? – drill

+0

鑽是正確的,這個答案是錯誤的。 – Menahem