我的部分研究项目是使用秒表来测量时间。每个秒表用于不同的任务,以测量 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 个任务。如果任务不是由处理器计算的,那么秒表中的时间会运行并浪费吗?
2 回答

慕妹3242003
TA贡献1824条经验 获得超6个赞
如果任务未由处理器计算,则会在秒表运行中计时并浪费。
如果你查看源代码System.Diagnostics.Stopwatch
你会发现它实际上并没有运行,没有浪费。它有两个时间戳start
,end
它实际上是elapsed
通过计算和添加它们之间的周期来计算的。Stopwatch
请注意,您可以多次启动和停止,它将测量这些运行之间的累积时间。所以答案是肯定的,它还会计算线程处于非活动状态的时间。
Stopwatch
同样由 Microsoft在多处理器环境中运行时应小心:
在多处理器计算机上,线程运行在哪个处理器上并不重要。但是,由于 BIOS 或硬件抽象层 (HAL) 中的错误,您可以在不同的处理器上获得不同的计时结果。要为线程指定处理器亲和性,请使用该
ProcessThread.ProcessorAffinity
方法。
另一方面,如果您想测量 CPU 执行代码所花费的时间,请查看以下链接:ExecutionStopwatch。它基本上利用GetThreadTimes
并测量线程在内核或用户模式下一起运行所花费的时间。
- 2 回答
- 0 关注
- 165 浏览
添加回答
举报
0/150
提交
取消