如何衡量在流程上下文切换中花费的时间的近似值?

时间:2012-12-05 01:16:11

标签: c# .net process operating-system context-switch

是否有可能测量C#中进程上下文切换的近似时间? 如果是,怎么样?

我根据书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)

其中一个问题是我们无法记录流程中每条指令的timeStamp。 我们不考虑上下文在其他进程之间的开支时间。

2 个答案:

答案 0 :(得分:1)

您可以使用WMI(Windows Management Instrumentation)

示例:

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"]);
}

答案 1 :(得分:0)

进程上下文切换由操作系统完成,与.NET或C#无关。

您可以使用Windows性能监视器监视每秒上下文切换的数量,但该进程本身并不知道任何上下文切换。

您还可以使用Process Explorer来监控上下文切换和各个进程的增量,默认情况下不会显示这些内容,但可以从“视图”,“选择列”,“性能”选项卡中添加