我目前有一个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之间的值.听起来这个价值太低,不足以证明这一点并行.