2014-12-19 47 views
0

我有一個在C#中一直運行的進程,它處於空閒狀態,除非它收到一個處理請求。一旦接收到請求,它就繼續處理該請求直到它完成,然後再次變爲空閒。我想要獲取類似於C++中的boost::timer::cpu_timer的每個請求的CPU掛壁時間,用戶時間和系統時間。在c#中有boost :: timer :: cpu_timer的等價物嗎?

Process.GetCurrentProcess().TotalProcessorTime, 
Process.GetCurrentProcess().UserProcessorTime 
Process.GetCurrentProcess().PrivilegedProcessorTime 

會給我所有請求的時間(因爲它是一個連續的運行過程)。

我想要每個請求的時間。有沒有在C#中的方法,我們可以得到這個?

+0

請注意,boost類也會計算整個過程的時間,而不僅僅是一個請求 - 如果在您的過程中執行多個「併發」操作,您將獲得所有累計CPU時間。根本不存在可以根據不同的操作/請求來測量CPU時間的這種事情。無論是提升(原生)還是.net(託管)代碼。 – 2014-12-19 08:23:34

+0

謝謝Christian.K。我希望在C#中使用類似於每個請求的東西。 boost :: timer :: cpu_timer m_timer; m_timer.start(); boost :: timer :: format(m_timer.elapsed(),boost :: timer :: default_places,「%w%u%s w/u/s」); – skini 2014-12-19 08:42:59

回答

2

如果一切都失敗了,你總是可以計算差異。

請注意,這將不準確,因爲不可避免地內核計數全部 CPU時間被分配給進程,而不僅僅是處理某個請求。

但是,只要您知道您在特定時間段內只提供了一項請求,請使用例如Process.GetCurrentProcess().TotalProcessorTime操作前後可以作爲合理的估計。

+0

您可能需要強調的是,「這不會是準確的」,在使用boost時也會如此(因爲OP似乎很擔心這一點)。 – 2014-12-19 08:24:31

+0

@ Christian.K感謝您的補充。 – sehe 2014-12-19 08:27:01