2017-09-11 16 views
3

を宣言することには何らかの利点がありますか?文字列に対して定数を使用した場合のパフォーマンスに関する顕著な利点はありますか?次の場合を仮定してください。ローカル変数にローカル変数C#

public void MethodUsingConstant() 
{ 
    const string searchedText = "foo"; 

    //some operations using searchedText string 
} 

public void MethodNoUsingConstant() 
{ 
    string searchedText = "foo"; 

    //some operations using searchedText string 
} 

これをクラス構造定数フィールドに入れることもできます。

また、これらのマイクロ最適化をあまりにも多く考えるのは避けてください。

+3

実証可能な測定可能なパフォーマンスの問題がある場合にのみ最適化します。それでも、パフォーマンスのボトルネックを見つけて最適化するだけです。 – Kevin

+0

これは非常に極端な「最適化」です。両方の文字列がインターンされ、実行時に同じ参照を取得することになります。最適化を使って両方の例をコンパイルし、ILを見ると、それらは同じです。 – Scott

+3

プログラムの正確性に違いがあります。定数として宣言することによって、あなたの意図は明確です。これは静的な値であり、コードの途中で別の値に設定できる変数ではありません。 – hatchet

答えて

1

あなたがそれについて考えるなら、それほど大きな違いはありません。それは、コンピュータが変数を見たときに、そのメモリアドレスと値を検索するからです。私はこのコードを試してみましたが、その差は非常に小さなである(3MS未満:ところでコードは〜107ミリ秒で走った)他の変数の数百万人にまですることができること:一般的に

 //Just changed to non const 
     const string s = "hello"; 

     string full = ""; 

     int k = 0; 

     for(int i = 0; i < 10000; i++) 
     { 
      full += s; 
     } 

、非constの対constがちょうど来てこれまで:その値は常に同じままです:constに設定してください。それ以外の場合はそのままにしてください。ここには偉大なlink about .NET optimizationがあります。

要約すると、あなたのコードは他の方法で最適化できない瞬間に、これらの小さな詳細に入るだけです。そのような場合は、コードは問題ありません。