我正在尝试确定在大量迭代循环中,每个“if”语句对我的C#应用程序性能的影响。由于没有找到相关主题,因此我创建了这个问题。
为测试,我进行了两个循环:一个没有“if”,另一个带有单个“if”语句。以下是代码。
为测试,我进行了两个循环:一个没有“if”,另一个带有单个“if”语句。以下是代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
namespace IfPerformance
{
class Program
{
static void Main(string[] args)
{
int N = 500000000;
Stopwatch sw = new Stopwatch();
double a = 0, b = 0;
bool f;
sw.Restart();
for (int i = 0; i < N; i++)
{
a += 1.1;
f = a < N;
}
sw.Stop();
Console.WriteLine("Without if: " + sw.ElapsedMilliseconds + " ms");
a = 0;
sw.Restart();
for (int i = 0; i < N; i++)
{
if (a < N)
a += 1.1;
else
b += 1.1;
}
sw.Stop();
Console.WriteLine("With if: " + sw.ElapsedMilliseconds + " ms");
Console.ReadKey();
}
}
}
我使用“优化代码”和“启动而不调试”的构建选项运行测试,结果如下:
没有if语句:154毫秒
有if语句:742毫秒
这意味着单个“if”语句导致性能减慢了近5倍。我认为这方面的讨论会很有帮助。
此外,我注意到在大型循环中存在多个额外的“if”语句可能会使我的最终应用程序减慢25%,在我看来这是相当显著的。
具体来说,我正在对一组数据进行Monte-Carlo优化,这需要对整个数据集进行多次循环。循环包含取决于用户设置的分支。从这一点上开始,“if”就出现了。
我对性能方面的专业人士提出以下问题:
- 在循环中增加额外的“if”语句对执行多次迭代的时间有什么影响?
- 如何避免减速?
如果我走错了,请发表您的意见。