如何使用parallel.for将项目添加到列表

问题描述:

我来自Threading with Parallel.For Adding Lists。对于链接中的例子,两个线程用于调用Parallel.Invoke,这仍然很慢,所以我想在循环内部执行一些多线程,假设我不在意订单项被添加。 但parallel.for没有作为expecetd工作,并给出indexofRange异常。 有人PLZ的帮助?如何使用parallel.for将项目添加到列表

private static void Main(string[] args) 
{ 
    var dict1 = new Dictionary<int, string>(); 
    var dict2 = new Dictionary<int, string>(); 
    Stopwatch s = Stopwatch.StartNew(); 
    Parallel.Invoke(() => FillDictionary(dict1, 10000000),() => FillDictionary(dict2, 10000000)); 
    //FillDictionary(dict1, 10000000); 
    //FillDictionary(dict2, 10000000); 
    Console.WriteLine("test"); 
    Console.WriteLine(s.Elapsed.TotalMilliseconds); 
    Console.ReadLine(); 
} 
private static void FillDictionary(Dictionary<int, string> toFill, int itemCount) 
{ 
    //for (int i = 0; i < itemCount; i++) 
     //toFill.Add(i, "test" + i); 
    Parallel.For(0, itemCount, (i) => toFill.Add(i, "test" + i));  
} 
+0

其实我以为也许使用parallel.for不是线程安全的。 – baozi 2014-09-21 18:20:13

Dictionarythread safe。使用ConcurrentDictionary<TKey, TValue>代替。

+0

它现在有效。还有一件事,考虑到我的例子迭代2 * 10万循环它抛出了内存异常。为什么发生? – baozi 2014-09-21 18:30:24

+0

,因为你没有足够的内存(RAM) – 2014-09-21 18:34:23

+0

我不这么认为。我有4 * 8GB内存,只用了三分之一。 – baozi 2014-09-21 18:38:01