如何确定该操作是否占用大量CPU

时间:2019-06-07 12:48:37

标签: c# asynchronous task measure

我要检查一些代码:

Task.WhenAll(contracts.Select(x => Task.Run(() =>
{
    // here some 30 lines of synchronous code

}))).GetAwaiter().GetResult();

我认为此代码最好在纯foreach中同步运行,因为在我看来30行代码似乎不需要太多的CPU密集型操作。但是我对此不太确定。

如果一项操作要花费50毫秒以上的时间,则最好以异步方式运行它。因此,我必须衡量它的性能。但是,在查看拉取请求时是不可能的。

那么,还有其他方法可以确定该操作是否确实占用大量CPU吗?

更新

如果一项操作要花费50毫秒以上的时间,则最好以异步方式运行它。

我从Stephen Cleary的博客中阅读了它: https://blog.stephencleary.com/2013/04/ui-guidelines-for-async.html

1 个答案:

答案 0 :(得分:1)

根本没有必要异步运行CPU操作,您只需添加大量开销,然后再使用相同的CPU资源即可。

异步操作的要点是,如果您必须等待,则无需阻塞踏板,因此它可以执行其他操作。

因此,即使该操作在纯CPU上运行2分钟,您也不会通过异步调用来赢得任何东西。

此外,您只是在同步等待所有操作完成。因此,您可以使用Task.Run并行运行操作,但是您无需执行其他任何操作。

据我所知,仅做.Result.GetAwaiter().GetResult()之间的唯一区别就是您得到的异常类型。

所以我的意思是:您的代码中已经没有异步,因此也没有要测量的东西。