如何从TPL为每个任务分配更多线程?我想调查一下,如果我将其设置为更大的值,我可以获得更好的性能。
现在我看到我的应用程序使用最多14个线程,cpu最多使用13%(核心i7)。
第二,如何查看为任务指定的当前线程数?
答案 0 :(得分:1)
有一个名为TaskScheduler
的内置扩展点。默认任务调度程序使用.NET线程池线程和若干启发式方法来确定用于处理排队到它的任务的最佳线程数。 More info on the default implementation is available here on MSDN(请参阅标题为默认任务计划程序的部分)。
如果您创建自己的TaskScheduler
实现,您可以精确控制要分配的线程数,分配时间,内核等等There's a sample here on MSDN如何执行此操作,但是您将在Parallel Extensions Xtras中找到更完整,更多样的实施。
所有这一切,如果你能击败默认的实现,我会感到惊讶。如果您正在进行任何I / O,请确保您是taking full advatange of async I/O APM APIs with Task.FromAsync
。
答案 1 :(得分:0)
根据您使用TPL的方式,您可以使用TaskCreationOptions.LongRunning创建任务,或者如果您使用的是Parallel.For,则可以在ParallelismOptions中指定MaxDegreeOfParallelism。
See this question了解更多链接