task默认对线程的调度是逐步增加的,连续多次运行并发线程,会提高占用的线程数,而等若干秒不运行,线程数又会降低。这样,会影响程序多次运行的效率。
即使使用了TaskCreationOptions.LongRunning参数,依然效率偏低。对于一些固定执行时间的线程,我们可以提高线程池的最小线程数,来显著提高task多线程的效率。
ThreadPool.SetMinThreads(100, 100);
提高最小线程数之后,可以不使用LongRunning参数。
测试结果(2000线程):
状态 时间
没有设置任何参数,首次运行 48s
没有设置任何参数,连续运行多次 15s~12s
未设置最小线程,设置LongRunning 15s
设置最小线程100,未设LongRunning 8s
设置最小线程100,设置LongRunning 16s
以上结果供大家参考。
联系QQ 564955427
------解决思路----------------------
task本来就是基于线程池的,不过对于任何验证分享我们都应该赞下