是什么让你获得更好的表现? C#:Const Vs Normal字段-in FOR循环字段声明

时间:2012-09-19 15:15:05

标签: c# .net performance

我想知道哪种方式能让我们在以下两种方式上取得更好的表现:

1。方式1

for(int i = 0; i < 10; i++)
{
   // do something in loop
}

2。方式2

for(int i = Constants.Zero; i < Constants.Ten; i++)
{
    // do something in loop
}
private const int Zero = 0; 

private const int Ten = 10;

基本上我想知道如果我们如上所述在Constants中使用for loop variable declaration,我们是否可以提高应用性能?

提前致谢!

2 个答案:

答案 0 :(得分:4)

这里没有任何性能优势,因为以这种方式声明的变量将最终成为注入的常量,就像在第一种情况下一样。所以他们变得基本相同。

//code 1
for(int i = 0; i < 10; i++)
{
     Console.WriteLine("Hello");
}

//IL 1

IL_0001:  ldc.i4.0    
IL_0002:  stloc.0     
IL_0003:  br.s        IL_0016
IL_0005:  nop         
IL_0006:  ldstr       "Hello"
IL_000B:  call        System.Console.WriteLine
IL_0010:  nop         
IL_0011:  nop         
IL_0012:  ldloc.0     
IL_0013:  ldc.i4.1    
IL_0014:  add         
IL_0015:  stloc.0     
IL_0016:  ldloc.0     
IL_0017:  ldc.i4.s    0A 
IL_0019:  clt         
IL_001B:  stloc.1     
IL_001C:  ldloc.1     
IL_001D:  brtrue.s    IL_0005

//code 2
for(int i = Constants.Zero; i < Constants.Ten; i++)
{
    Console.WriteLine("Hello");
}

//IL 2
IL_0001:  ldsfld      UserQuery+Constants.Zero
IL_0006:  stloc.0     
IL_0007:  br.s        IL_001A
IL_0009:  nop         
IL_000A:  ldstr       "Hello"
IL_000F:  call        System.Console.WriteLine
IL_0014:  nop         
IL_0015:  nop         
IL_0016:  ldloc.0     
IL_0017:  ldc.i4.1    
IL_0018:  add         
IL_0019:  stloc.0     
IL_001A:  ldloc.0     
IL_001B:  ldsfld      UserQuery+Constants.Ten
IL_0020:  clt         
IL_0022:  stloc.1     
IL_0023:  ldloc.1     
IL_0024:  brtrue.s    IL_0009

second 的情况下,我使用static类来创建常量。

答案 1 :(得分:3)

没有性能差异。在两种情况下,编译的for循环都将完全相同。

常量被“烧入”已编译的代码,就像你使用了文字值一样。

(我假设这只是一个玩具示例:否则你为什么要用你自己的替换完美的,普遍认可的符号 - 010等等不广为人知的版本?)