C# 省略for语句/if语句的大括号会导致性能问题吗?

C# 省略for语句/if语句的大括号会导致性能问题吗?,c#,c#-4.0,C#,C# 4.0,性能也取决于变量名?否,省略大括号不会对性能产生任何影响。您看到的差异可能是由于程序在开始时预热所致。交换这两个代码块,您将看到相同的差异或没有差异 如果在发布模式下构建程序,并在(ILSpy版本2.1.0.1603)中打开可执行文件,则会看到已添加大括号: 00:00:05.0266990 00:00:04.7179756 private static void Main(字符串[]args) { 秒表t=新秒表(); t、 Start(); int i=0; 对于(int j=0;j

性能也取决于变量名?

否,省略大括号不会对性能产生任何影响。您看到的差异可能是由于程序在开始时预热所致。交换这两个代码块,您将看到相同的差异或没有差异

如果在发布模式下构建程序,并在(ILSpy版本2.1.0.1603)中打开可执行文件,则会看到已添加大括号:

00:00:05.0266990

00:00:04.7179756
private static void Main(字符串[]args)
{
秒表t=新秒表();
t、 Start();
int i=0;
对于(int j=0;j<20000001;j++)
{
i++;
}
t、 停止();
秒表t2=新秒表();
t2.Start();
int k=0;
对于(int l=0;l<20000001;l++)
{
k++;
}
t2.停止();
控制台写入线(t.s);
控制台写入线(t2已过);
Console.ReadLine();
}
原始代码:

private static void Main(string[] args)
{
    Stopwatch t = new Stopwatch();
    t.Start();
    int i = 0;
    for (int j = 0; j < 2000000001; j++)
    {
        i++;
    }
    t.Stop();
    Stopwatch t2 = new Stopwatch();
    t2.Start();
    int k = 0;
    for (int l = 0; l < 2000000001; l++)
    {
        k++;
    }
    t2.Stop();
    Console.WriteLine(t.Elapsed);
    Console.WriteLine(t2.Elapsed);
    Console.ReadLine();
}
Stopwatch t1=新秒表();
t1.Start();
int i=0;
对于(int j=0;j<20000001;j++)
i+=1;
t1.停止();
秒表t2=新秒表();
t2.Start();
int k=0;
对于(int j=0;j<20000001;j++)
{
k+=1;
}
t2.停止();

您运行了多少次?这在统计上有意义吗?i、 e.您是否运行了多次并计算了平均值和平均值的标准误差?另外,试着交换循环;这应该不会引起任何问题。很可能你看到的是JIT/fusion time,或者只是简单的旧随机性看看ILSPY生成的IL,我不相信会有什么不同。如果进行基准测试,不要在一个实例中对两个不同的事物进行基准测试。在两个独立的运行中对它们进行基准测试。或者可能名为
k
的变量比名为
i
的变量更快?实际上,在括号块中交换代码块的速度仍然更快。但不确定它们在什么配置下运行。但是,将第二个
j
更改为
p
将改变这一点。使用新的for参数名称时,IL代码似乎会有所不同(for参数名称不同时会生成额外的
int32 V_5
。@Default,dotnetfiddle似乎是一个很好的资源,我不知道。谢谢,是的,我相信即使会有性能上的差异,那也可以忽略不计。这只是我们所看到的随机差异。括号与此无关。不,关于括号你是对的。但这似乎与变量名有关。请注意,
j
在for循环中重复使用。它生成不同的ILs(dotnetfiddle也可以显示这一点)。但仍然可以忽略不计:)
private static void Main(string[] args)
{
    Stopwatch t = new Stopwatch();
    t.Start();
    int i = 0;
    for (int j = 0; j < 2000000001; j++)
    {
        i++;
    }
    t.Stop();
    Stopwatch t2 = new Stopwatch();
    t2.Start();
    int k = 0;
    for (int l = 0; l < 2000000001; l++)
    {
        k++;
    }
    t2.Stop();
    Console.WriteLine(t.Elapsed);
    Console.WriteLine(t2.Elapsed);
    Console.ReadLine();
}
Stopwatch t1 = new Stopwatch();
t1.Start();
int i = 0;
for (int j = 0; j < 2000000001; j++)
    i += 1;
t1.Stop();
Stopwatch t2 = new Stopwatch();

t2.Start();
int k = 0;
for (int j = 0; j < 2000000001; j++)
{
    k += 1;
}
t2.Stop();