间歇性容量小于当前大小错误
本文关键字:错误 小于 容量 | 更新日期: 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 即可。您不必以这种方式处理同步集合。