Fak*_*DIY 0 c# performance loops if-statement
我正在用c#编写蒙特卡罗模拟,我正在努力确保编写尽可能高效的代码 - 我正在运行数十亿个循环,而且事情变得越来越慢.我有一个关于Else在循环中使用语句的问题.
我的问题是:这两种方法的性能有什么不同吗?在第一个我使用If-Else语句,在第二个我省略了Else,因为If案例非常罕见.
编辑:假设我需要做的不仅仅是在满足条件时分配true/false,因此直接赋值不是唯一需要完成的事情.if-Else方式的执行速度是否同样快?
//METHOD 1
...
for (int index = 0; index < 6; index++)
{
for (int x = 0; x < 50; x++)
{
for (int y = 0; y < 50; y++)
{
bool ThingWhichIsVeryRarelyTrue = SomeFunction(index,x,y);
if (ThingWhichIsVeryRarelyTrue)
{
BooleanAnswerArray[index][x][y] = true;
DoSomeOtherStuff();
}
else
{
BooleanAnswerArray[index][x][y] = false;
}
}
}
}
...
//METHOD 2
for (int index = 0; index < 6; index++)
{
for (int x = 0; x < 50; x++)
{
for (int y = 0; y < 50; y++)
{
BooleanAnswerArray[index][x][y] = false;
bool ThingWhichIsVeryRarelyTrue = SomeFunction(index,x,y);
if (ThingWhichIsVeryRarelyTrue)
{
BooleanAnswerArray[index][x][y] = true;
DoSomeOtherStuff();
}
}
}
}
...
Run Code Online (Sandbox Code Playgroud)
在您的样本中,直接分配应该非常好:
BooleanAnswerArray[index][x][y] = SomeFunction(index,x,y);
Run Code Online (Sandbox Code Playgroud)
旁注:尝试缓存数组访问可能是个好主意 - 应该能够缓存,var row = BooleanAnswerArray[index][x]以避免在最内层循环中进行额外的索引.
关于if/else的更新问题:
首先 - 这是性能问题所以必须测量不同的选项,看看代码是否符合目标.Stopwatchclass通常足以进行这种本地化的性能比较,否则可能需要分析器.
猜测
if 无论是否有一个或两个分支,特别是在存在任何其他非平凡的代码(如非内联函数调用)时,都会产生完全相同的影响.