![](/img/trans.png)
[英]How we can measure cpu time for a method using PerformanceCounter?
[英]How to measure actual time CPU spent executing the code using the stopwatch?
我的研究项目的一部分是使用秒表测量时间。
每个秒表用于不同的任务,以测量while循环应运行多长时间。
我想知道我是否做了很多漫长的任务,这种措施是否准确?
想法代码示例:
public static void run(){
var tasks= new List<Task<int>>();
foreach(var task in taskList) //taskList is global object with 10 variables inside
tasks.Add(Task.Factory.StartNew<int>(()=>taskFunction(task)));
Task.WaitAll(tasks.ToArray());
}
private int taskFunction(task) {
Stopwatch watch = new Stopwatch();
while (watch.ElapsedMilliseconds < MaxTime * 1000)
{
watch.Start();
doSomething(); // takes lot of time;
watch.Stop();
doSomethingDiffrent();
}
}
因此,我将创建10个任务。 如果处理器未计算任务,秒表中的时间会浪费吗?
如果处理器不执行任务,则秒表运行会浪费时间。
如果您查看System.Diagnostics.Stopwatch
的源代码,您会发现它实际上并未运行,这没有浪费。 它有两个时间戳记的start
和end
,它实际上是通过计算和相加的elapsed
来计算elapsed
的时间。 请注意,您可以多次启动和停止Stopwatch
,它将测量这些运行之间的累积时间。 因此答案是肯定的 ,它将在线程不活动时也计算时间。
另外,由Microsoft负责,在多处理器环境中运行Stopwatch
时应格外小心:
在多处理器计算机上,线程在哪个处理器上运行无关紧要。 但是,由于BIOS或硬件抽象层(HAL)中的错误,您可以在不同的处理器上获得不同的计时结果。 若要指定线程的处理器相似性,请使用
ProcessThread.ProcessorAffinity
方法。
另一方面,如果要测量CPU执行代码所花费的时间,请查看以下链接: ExecutionStopwatch 。 它基本上利用了GetThreadTimes
的用法,并测量了线程在内核或用户模式下一起运行所花费的时间。
如果您处于调试模式,则可以使用诊断工具
启动应用程序后,进入菜单:
调试-> Windows->显示诊断工具
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.