2012-12-05 64 views
2

有沒有可能測量C#中進程上下文切換的近似時間? 如果是,如何?我如何測量進程上下文切換所用時間的aproximation?

我是根據書Cracking the Coding Interview: 150 Programming Questions and Solutions提出這個問題的。

他們的解決方案是:

假設只有2個進程,P1和P2。 (是一個很大的近似值,我相信有更準確的值)

P1正在執行,P2正在等待執行。在某些時候,OS必須交換P1和P2 - 讓我們假設它發生在P1的第N條指令處。所以,上下文切換時間,這將是:

Time_Stamp(P2_1) - TimeStamp(P2_N) 

其中的一個問題是,我們不能錄製過程中的每指令的時間戳。 而我們不考慮在其他進程之間切換上下文的花費時間。

+0

您可以放心地假設,當你提出這個解決方案,您就不會被錄用。 –

+0

@HansPassant我認爲你是對的,我相信這個問題也不是一個好的面試問題,有點棘手,你需要承擔很多與現實很不相稱的事情。 – Tito

回答

0

你可以使用WMI(Windows上添加管理規範)

例子:

ManagementScope managementScope = new ManagementScope("\\\\.\\ROOT\\cimv2"); 
ObjectQuery objectQuery = new ObjectQuery("SELECT * FROM Win32_PerfFormattedData_PerfProc_Thread"); 
ManagementObjectSearcher searcher = new ManagementObjectSearcher(managementScope, objectQuery); 
ManagementObjectCollection objectCollection = searcher.Get(); 

foreach (ManagementObject m in objectCollection) 
{ 
    Console.WriteLine("ContextSwitchesPersec : {0}", m["ContextSwitchesPersec"]); 
} 
0

進程上下文切換由OS完成,與.NET或C#無關。

您可以使用Windows性能監視器監視每秒上下文切換的數量,但進程本身不知道任何上下文切換。

您還可以使用Process Explorer監控上下文切換,併爲各個進程三角洲,這些默認不顯示,但可以從查看,選擇列,性能選項卡

+0

我可能會誤解爲測量C#程序花費的時間 – Mataniko

相關問題