并行。写入 BitArray 时,For 比常规 For 慢

问题描述 投票:0回答:1

有人能解释一下为什么在写入 BitArray 时 Parallel.For 的行为比 For 慢吗?和内存锁有关系吗?

float[] output = new float[100000];
BitArray bitArray = new BitArray(output.Length);
Parallel.For(0, output.Length, i =>
{
  bitArray[i] = output[i] > 0.5f;
});
float[] output = new float[100000];
BitArray bitArray = new BitArray(output.Length);
for (int i = 0; i < output.Length; i++)
{
  bitArray[i] = output[i] > 0.5f;
}

预期的 Parallel.For 比 For 更快,但在我的机器上,它比其他机器花费了两个数量级的时间(+10s vs 100ms)。

c# memory
1个回答
0
投票

Parallel.For() 在启动新线程方面有一些开销,但它对于运行昂贵的计算的循环非常有用。

在您的情况下,循环仅在数组中分配值,这非常便宜,因此创建新线程的开销实际上会降低性能,因此普通的 for 循环会更好。

© www.soinside.com 2019 - 2024. All rights reserved.