c#语言数组与循环,c# – 在并行for循环中测试2个数组是否相等

我目前有一个for循环来比较2个数组并确定它们是否相等.

public override bool Equals(object obj)

{

RushHourPathLengthNode otherNode = (RushHourPathLengthNode)obj;

// Compare their carCoords and return false as soon as we find a difference

for (int i = 0, l = carCoords.Length; i < l; ++i)

if (carCoords[i].x != otherNode.carCoords[i].x || carCoords[i].y != otherNode.carCoords[i].y)

return false;

return true;

}

这很好用,但它是我的程序中最慢的部分之一.这样我的测试用例大约需要7秒钟来计算.

虽然我可能运行50K任务,但我的i7 860 CPU(4核,8个线程)的CPU使用率约为50%.

我的想法是使用并行for循环来最大化CPU使用率并使其更快.这就是我提出的.

public override bool Equals(object obj)

{

RushHourPathLengthNode otherNode = (RushHourPathLengthNode)obj;

bool result = true;

Parallel.For(0, carCoords.Length, (i, loopState) =>{

if (!result)

loopState.Stop();

if (carCoords[i].x != otherNode.carCoords[i].x || carCoords[i].y != otherNode.carCoords[i].y)

result = false;

});

return result;

}

对我来说,看起来它会尝试并行运行,并且一旦因为loopState.Stop而找到差异就会停止工作.这样CPU的使用率是90%,但我的测试用例大约需要35秒来计算,我不明白为什么.

我的实施有问题还是我的整个方法都错了?

编辑:carCoords.Length将是介于2和-100之间的值.听起来这个价值太低,不足以证明这一点并行.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值