我有一个使用Task
(TPL)对象进行异步执行的应用程序。
主线程等待触发(一些 TCP 数据包),然后执行几个任务。我想做的是衡量在任务中花费的时间。
看一下代码。我有一些冗长的操作(Generator
),包含在Stopwatch's
开始/停止中。
Task.Factory.StartNew((t) => {
Stopwatch sw = new Stopwatch();
sw.Start();
Generator g = new Generator();
g.GenerateIntervals(); // lengthy operation
sw.Stop();
GlobalStopwatch.Add(sw.Elapsed);
});
这是问题所在。秒表DateTime.UtcNow.Ticks
在 的时刻使用Start()
,然后在 的时刻再次使用Stop()
。然后它减去这两个以获得经过的时间。
问题是,其他一些线程(在单线程系统中)可以获得一些处理器时间,而Generator
(来自代码)正在执行其GenerateIntervals()
冗长的操作。这意味着秒表记录的经过时间不仅包含Generaor.GenerateIntervals()
时间,还包含其他线程在其间完成工作的时间。
是否有任何简单的方法可以准确地知道某些方法占用了多少处理器时间,不包括由于分时机制而导致的其他线程的执行时间?