我正在用这样的任务填充任务工厂(伪代码):
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个任务/s,直到队列完成。
小气明显的行为,不是吗?
我的问题是:
是否有办法迫使任务工厂在开始时启动更多的任务?
im已经通过一些msdn示例类的变化来限制运行任务的最大值,以防止过多的内存消耗。
或者这个有趣的测量方法或者我的考虑有什么问题吗?
没有必要在不同的线程中运行所有的工作,否则我不会使用工厂
我只想从工厂的非工作偷窃行为中获益。
其他的一切我都依赖于工厂的智慧。
发布于 2013-12-09 10:54:05
据我所知,TaskFactory使用ThreadPool,所以您可以尝试SetMaxThreads方法。但实际上,它的目的是优化资源消耗。所以我不认为你会有多大的效率提高。
您也可以尝试使用new Thread()手动启动线程,这将帮助您无限地启动多个线程,但我认为您不会获得太多的效率提高。
https://stackoverflow.com/questions/20468315
复制相似问题