0

我想同时运行多个任务。需要明确的是,我希望它们是同时的,而不仅仅是并行的——在任何时间点,我希望每个任务都消耗相同数量的 CPU 周期,在一定的容差范围内。如何在.Net 中做到最好?

4

1 回答 1

1

有两种测量方法,挂钟时间CPU 时间。大多数人可能会告诉您使用秒表来衡量性能,但这可能是也可能不是您想要的数字。

如果您只关心实时执行需要多长时间,请使用秒表,如果您想知道线程本身运行了多长时间,可以通过 Native API 调用GetThreadTimes来完成。这是一篇关于使用它的 CodeProject的文章。请注意,您将无法为此使用 TPL,您将需要使用真正的线程作为 TPL 它回收线程,因此时间不会是任务的实际执行时间。

第二种选择是使用QueryThreadCycleTime。这不会给你时间,但会给你当前线程已经执行的周期数,你可以在开始时做一个,在结束时做一个,然后减去两个数字。再次注意Task重用线程,因此除非您使用完整的线程,否则该数字可能可靠也可能不可靠。

请注意,您不能直接转换cycles->seconds,因为许多处理器(尤其是移动处理器)不以固定速度运行,因此没有常数可以乘以得到以秒为单位的经过时间。但是,如果您使用的是不改变其速度的处理器,那么从周期中获取挂钟时间将是一个简单的数学问题。

于 2013-07-17T18:12:30.880 回答