我正在填写任务工厂,其任务类似于此(伪代码):
private int _taskcounter;
剪断
var factory = new TaskFactory();
for(var i = 0;i<1000;i++)
factory.StartNew(() => doWork());
剪断
private void doWork(){
Interlocked.Increment(ref _taskcounter);
//do some slow I/O work here
Interlocked.Decrement(ref _taskcounter);
}
如果你现在看_taskcounter,你可以看到它最初开始大约10个任务 但随后它会开始1到2个任务/秒,直到队列结束。
小的明显行为,不是吗?
我的问题是:
有没有办法强制任务工厂在开始时启动更多任务?
我已经使用一些msdn示例类的变体来限制运行任务的最大值,以防止过多的内存消耗。
或者这个有趣的测量方法或我的考虑是否有问题?
没有必要在不同的线程中运行所有工作,否则我不会使用工厂 我只想从工厂的非工作偷窃行为中受益。
依赖工厂的智慧来处理其他一切。
答案 0 :(得分:1)
据我所知,TaskFactory使用ThreadPool,因此您可以尝试使用SetMaxThreads方法。但实际上它旨在优化资源消耗。所以我认为你的效率不会提高。
此外,您可以尝试使用new Thread()
手动启动线程,这可以帮助您快速启动多个线程,但是我不认为您会获得更高的效率。