0

以下に示すように、どちらの方法でもパフォーマンスが向上するかどうかを知りたいと思います。

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

前もって感謝します !

4

2 に答える 2

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

2番目のケースでは、staticクラスを使用して定数を作成しました。

于 2012-09-19T15:17:59.317 に答える
3

パフォーマンスの違いはありません。コンパイルされたforループは、どちらの場合もまったく同じになります。

定数は、リテラル値を使用した場合と同じように、コンパイルされたコードに「焼き付け」られます。

0(そして、これは単なるおもちゃの例だと思います。そうでなければ、完全に優れた、広く認識されている記号(、10など)を、広く知られていない独自のバージョンに置き換えたいのはなぜですか?)

于 2012-09-19T15:16:39.797 に答える