我只是试图确定每个“if”语句对我的C#应用程序的性能的影响,当它在具有大量迭代的循环中使用时。我还没有找到关于这个话题,所以我创建了这个话题。如果语句性能在c#
对于测试我做了2个循环:一个没有“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();
}
}
}
我用“优化代码”构建选项和“无需调试就开始”运行测试。结果如下: 没有如果:154毫秒 与if:742毫秒
这意味着单个“if”语句带来差不多5倍的性能下降。我认为这会有所帮助。
此外,我已经注意到,在一个大循环中存在几个额外的“if”可能会使我的最终应用程序减慢25%,这对我来说意义重大。
具体而言,我对一组数据执行蒙特卡罗优化,这需要整个数据集中的很多循环。循环包含取决于用户设置的分支。从这一点“如果”出现。
我的问题在性能方面的专业人士:
- 什么是额外的运行多次迭代的时间循环的影响,“如果” S?
- 如何避免放缓?
如果我走错了方向,请发表您的意见。
您正在确定每隔500000000条if语句的影响。 –
这些代码示例是两个不同的代码,一个是布尔赋值,另一个是条件语句,因此这不是评估性能的合适方法。 – saeed
不要挂上这样的微观优化。无论如何,编译器可能会优化大量的代码。您无法在调试模式下可靠地进行性能测试。使用用户期望后,在整个程序中使用外部工具完成最佳性能测试 – Sico