2011-12-06 109 views
4

我已經編寫了一個依賴於線程的程序。此外,還需要測量每個線程所花費的總時間,以及執行時間(內核時間加上用戶時間)。線程執行時序

可以有任意數量的線程,許多線程可以一次運行。這歸功於用戶活動。我需要它們儘可能快地運行,所以使用像WMI/Performance Monitor那樣的一些開銷來測量線程時間並不理想。

目前,我使用GetThreadTimes,如本文所示:http://www.codeproject.com/KB/dotnet/ExecutionStopwatch.aspx

我的問題很簡單:我理解.NET線程可能不是一比一的基礎與系統線程上對應(儘管到目前爲止我的測試中,似乎是一對一的)。既然如此,如果.NET決定將兩個或更多的線程放到一個系統線程中,我會從我的計時代碼中得到奇怪的結果嗎?如果是這樣(或者甚至沒有),是否有另一種方法來測量.NET線程的內核和用戶時間?

+3

就我個人而言,我會選擇像[SmartThreadPool](http://www.codeproject.com/KB/threads/smartthreadpool.aspx)這樣的線程池,並使用它們的性能計數器來衡量事物。 –

+0

我很難理解你的問題,而不是你真正想要衡量的是什麼,爲什麼。您是否考慮過使用秒錶類型+日誌記錄進行簡單的計時或任何常規CPU分析器,例如ANTS或Jetbrain? – Mahol25

回答

1

如其所述:多線程由線程調度程序內部管理,CLR通常委託給操作系統。線程調度程序確保所有活動線程都分配了適當的執行時間,並且正在等待或阻止的線程(例如,在排它鎖或用戶輸入上)不佔用CPU時間。理論上NET團隊可能會實現他們自己的調度程序,但我懷疑這一點。所以我認爲GetThreadTimes函數是您需要的。