我需要检查成千上万个项目是否为最新状态。每个项目都需要读取数千个文件(其中某些文件可能在不同的项目中相同)。
目前,使用TPL(async/await)实现此操作,每个要读取的文件和每个要检查的项目都有一个任务。这样做效果很好,但是当我进行性能分析时,第三个最耗费时间的函数是线程池中的TrySteal函数。
使用Visual Studio并发查看器,我发现99%的线程时间都花费在与并发相关的项上,只有1%用于执行。这导致我认为我可能创建了太多的任务(注意:我没有在任何地方使用Task.Run,只有await)。
使用Parellel.For读取一堆文件是否比使用async/await少开销?使用任务编程库会产生多少开销?