【发布时间】:2018-04-30 02:40:57
【问题描述】:
如何确定在特定调用Parallel.ForEach(或Parallel.Invoke,或Parallel.For)期间使用的线程数
我知道如何限制最大线程数,例如
Parallel.ForEach(myList,
new ParallelOptions { MaxDegreeOfParallelism = 4 },
item => { doStuff(item); });
我知道,除了当前线程之外,Task.Parallel 库使用一些启发式方法来确定在运行时使用的附加线程池线程的最佳数量;介于 0 和 MaxDegreeOfParallelism 之间的某个值。
我想知道实际使用了多少线程,用于记录目的:
Stopwatch watch = Stopwatch.StartNew();
Parallel.ForEach(myList, item => { doStuff(item); });
trace.TraceInformation("Task finished in {0}ms using {1} threads",
watch.ElapsedMilliseconds, NUM_THREADS_USED);
我主要是出于好奇和增进理解而希望记录这些数据。它不必是 100% 可靠的,因为我不打算将它用于其他任何事情。
有没有办法获得这个数字,而不会造成重大的性能损失?
【问题讨论】:
标签: c# .net multithreading .net-4.0 task-parallel-library