是否有可能测量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。 我们不考虑上下文在其他进程之间的开支时间。
答案 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来监控上下文切换和各个进程的增量,默认情况下不会显示这些内容,但可以从“视图”,“选择列”,“性能”选项卡中添加