我有一个基本上循环遍历集合的任务,并成对对它们进行操作(对于int i = 0; i< limit; i + = 2等)所以,我在线程循环上看到的大多数建议都使用某种foreach机制。但这对我来说似乎有点棘手,看看我如何使用这种成对操作的方法。
所以我想要做的就是替换:
DoOperation(list.Take(numberToProcess));
与
Thread lowerHalf = new Thread(() => => DoOperation(list.Take(numberToProcess/2)));
Thread lowerHalf = new Thread(() => => DoOperation(list.getRange(numberToProcess/2, numberToProcess));
lowerHalf.Start();
upperHalf.Start();
这似乎完成了工作,但它非常慢。每次迭代都比前一次迭代慢,当我调试时,Thread视图显示了一个不断增长的Threads列表。
但我觉得Threads在完成后终止了自己的印象?是的,线程确实完成了。 DoOperation()方法几乎只是一个for循环。
那么我在这里不理解的是什么?
答案 0 :(得分:4)
尝试Parallel.For这将节省大量工作。
答案 1 :(得分:1)
要解释一下pranitkothari的答案,并提供一个不同的例子,你可以使用
list.AsParallel().ForAll(delegate([ListContainingType] item) {
// do stuff to a single item here (whatever is done in DoOperation() in your code
// except applied to a single item rather than several)
});
例如,如果我有一个列表字符串,它将是
List<String> list = new List<String>();
list.AsParallel().ForAll(delegate(String item) {
// do stuff to a single item here (whatever is done in DoOperation() in your code
// except applied to a single item rather than several)
});
这将允许您在单独的线程上对列表中的每个项目执行操作。它更简单,因为它处理所有&#34;多线程&#34;对你而言。
This是一篇很好的文章,解释了其中的一个差异