2011-08-03 3 views
6

constフィールドまたはreadonlyフィールドを使用すると、プライベート変数のみを使用する場合、通常の変更可能なフィールドと比較してパフォーマンス上のメリットはありますか。例えばC#のフィールドにconstまたはreadonly修飾子を使用すると、パフォーマンス上の利点はありますか?

foobaar

public class FooBaar 
{ 
    private string foo = "something"; 
    private const string baar = "something more" 

    public void Baaz() 
    { 
     //access foo, access baar 
    } 
} 

上記の例では、あなたが2つのフィールドがあります見ることができます。どちらもクラスの外ではアクセスできないので、constをここではどのように使用するのが好きなのですか?privateの代わりに。 constはパフォーマンス上のメリットをもたらしますか?


人々がとして、この質問を誤解しているため、この問題は以前、コミュニティによって閉鎖された「パフォーマンスの面でconstreadonlyの違いは何ですか?」ここで回答されている:What is the difference between const and readonly?
実際には、"constまたはreadonlyを使用してもパフォーマンスのメリットが得られますか?

+3

あなたは、ナノ最適化が常にありますマイクロ最適化と退屈しています。 –

+0

私は質問を編集して、pplにそれを見せたいと思います! –

+0

@spenderはあなたの編集した質問に対する完璧な答えをすでに持っていると思います。ここでスピードを心配しないで、正確かつ明白にしよう。 –

答えて

6

このような測定が必要な重要なコードに遭遇するまでは、これらの構造のパフォーマンスについてあまり心配する必要はありません。パフォーマンスの理由からではなく、コードの正確性を保証するためにそこにあります。

+0

私は質問をより明確に編集しました! –

+11

完全に良いアドバイスです。私はパフォーマンスについても心配しませんが、質問には答えません。 – iandotkelly

+0

これは質問に答えず、パフォーマンスに重大なコードが書かれていないことを前提としています。それは間違いなく受け入れられた答えではありません。 – Daniel

11

constは、コンパイラによってコードにインライン化されるように最適化されますが、読み取り専用はインライン化できません。しかし、すべての型の定数を作ることはできません - ここではそれらを読み込み専用にする必要があります。

コードに定数が必要な場合は、可能であればconstを使用する必要があります。そうでない場合は読み取り専用で、安全性は確保できますが、パフォーマンス上の利点はありません。一例として、

public class Example 
{ 
    private const int foo = 5; 
    private readonly Dictionary<int, string> bar = new Dictionary<int, string>(); 

    //.... missing stuff where bar is populated 

    public void DoSomething() 
    { 
     Console.Writeline(bar[foo]); 

     // when compiled the above line is replaced with Console.Writeline(bar[5]); 
     // because at compile time the compiler can replace foo with 5 
     // but it can't do anything inline with bar itself, as it is readonly 
     // not a const, so cannot benefit from the optimization 
    } 
} 
+0

私は質問をより明確に編集しました! –

+3

私は私の答えをより明確に編集しました – iandotkelly

関連する問題