繁体   English   中英

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

[英]How can I measure the approximation of the time spent in a process 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。 我们不考虑上下文在其他进程之间切换的消耗时间。

您可以使用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"]);
}

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

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

您还可以使用Process Explorer监视上下文切换和各个进程的增量,默认情况下不显示这些,但可以从View,Select Columns,Performance选项卡添加

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM