测量多线程环境中的执行时间

Kor*_*tak 10 c# multithreading time-measurement

我有一个使用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);
});
Run Code Online (Sandbox Code Playgroud)

这是问题所在.秒表DateTime.UtcNow.Ticks在此时使用,Start()然后再使用Stop().然后它减去这两个以获得经过的时间.

问题是,一些其他线程(在单线程系统中)可以获得一些处理器时间,而Generator(来自代码)正在进行GenerateIntervals()冗长的操作.这意味着秒表记录的经过时间不仅包含Generaor.GenerateIntervals()时间,还包含其他线程在其间工作的时间.

是否有任何简单的方法可以确切知道某些方法花费了多少处理器时间,而不包括由于分时机制而导致的其他线程的执行时间?

Tim*_*uri 4

您问题的答案是“否”...不,您无法测量特定 的CPU 上的thread累积时间。

(旁白:我真的希望人们在回答之前能阅读这个问题并理解它!!!)

process好吧,回到你的问题...你能做的最准确的事情是为每个任务分离一个单独的任务,然后测量该进程的 CPU 时间(这可以在 .Net 中完成)...但这太过分了。

如果您需要有关如何执行此操作的帮助,您应该专门询问另一个问题。