gpt4 book ai didi

c# - Parallel.ForEach 错误行为

转载 作者:可可西里 更新时间:2023-11-01 08:42:34 26 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
C# Value storage during Parallel Processing

今天我在我的控制台应用程序中运行一些性能测试,我偶然发现了一些非常出乎意料的事情。我的代码:

int iterations = 1000000;

var mainList = new List<string>();

for (int i = 0; i < iterations; i++)
{
mainList.Add(i.ToString());
}

var listA = new List<string>();

Parallel.ForEach(mainList, (listItem) =>
{
if (Int32.Parse(listItem)%2 == 0)
{
listA.Add(listItem);
}
});

Console.WriteLine("Parallel Count: {0}", listA.Count);

var listB = new List<string>();
foreach (var listItem in mainList)
{
if (Int32.Parse(listItem) % 2 == 0)
{
listB.Add(listItem);
}
}

Console.WriteLine("Sequential Count: {0}", listB.Count);

这导致输出:

并行数:495939

连续计数:500000

我运行了好几次,并行循环似乎从来没有按适当的次数执行。谁能解释这种“不当行为”?并行循环值得信赖吗?

附言我知道在提供的代码示例中有很多废话,比如 ToString() 调用整数而不是解析它们,但这只是我在测试时想出的随机代码。提前致谢。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com