间歇性容量小于当前大小错误

本文关键字:错误 小于 容量 | 更新日期: 2023-09-27 18:34:31

我正在尝试对大量实体执行迭代,以查看它们的匹配程度

我最初写的(其中 MatchData 是结构列表,GenerateMatch 对两个实体执行操作(

for (int i = 0; i < count; i++)
  {
      for (int j = i + 1; j < count; j++)
      {
       MatchData.Add(GenerateMatch(i, j));
       Console.WriteLine("Stage :" + i + " ::: " + j);
      }
  }

工作正常,但速度很慢

所以我把它改成了

Parallel.For(0, count, i =>
  {
   for (int j = i + 1; j < count; j++){
        MatchData.Add(GenerateMatch(i, j));
        Console.WriteLine("Stage :" + i + " ::: " + j);
        }});

打折这会给我一个巨大的列表,它偶尔(但并非总是(抛出错误"容量小于当前大小">

作为并行库的新手,我想我正在做的事情可以更好地执行(ThreadSafe?

同样作为次要问题,我如何计算在我被无序时已完成的 i 数量。谢谢

间歇性容量小于当前大小错误

代码中的错误是对 MatchData 的并发访问。可能的解决方案:

var matches =
from i in ParallelEnumerable.Range(0, count)
from j in ParallelEnumerable.Range(i+1, count - (i+1))
select GenerateMatch(i, j);

只需使用 PLINQ 即可。您不必以这种方式处理同步集合。