我有一个应用程序,使用Task
(TPL)对象进行异步执行。
主线程等待触发器(一些TCP数据包),然后执行多个任务。我想做的就是测量任务所花费的时间。
看一下代码。我有一些耗时操作(Generator
),在Stopwatch
的开始/停止中被封装。
Task.Factory.StartNew((t) => {
Stopwatch sw = new Stopwatch();
sw.Start();
Generator g = new Generator();
g.GenerateIntervals(); // lengthy operation
sw.Stop();
GlobalStopwatch.Add(sw.Elapsed);
});
这里有个问题。Stopwatch在
Start()
时使用DateTime.UtcNow.Ticks
,然后在Stop()
时再次使用。然后它将两者相减以获得经过的时间。问题在于,在
Generator.GenerateIntervals()
执行耗时操作时,其他线程(在单线程系统中)可能会获取一些处理器时间。 这意味着秒表记录的经过时间不仅包含Generator.GenerateIntervals()
时间,还包括其他线程在其中执行任务的时间。是否有一种简单的方法可以精确地知道某个方法所需的处理器时间,而不包括由于时间共享机制而导致的其他线程执行时间?