switch
ステートメントを使用することif/else
とC#で使用することのメリット/デメリットは何ですか。コードの見た目以外に、それほど大きな違いがあるとは想像できません。
結果のILまたは関連するランタイムパフォーマンスが根本的に異なる理由はありますか?
SWITCHステートメントは、デバッグモードまたは互換モードのIFと同じアセンブリのみを生成します。リリースでは、(MSILの 'switch'ステートメントを介して)ジャンプテーブルにコンパイルされます-これはO(1)です。
C#(他の多くの言語とは異なり)では、文字列定数をオンにすることもできます。これは、動作が少し異なります。任意の長さの文字列のジャンプテーブルを作成することは明らかに実用的ではないため、ほとんどの場合、このようなスイッチはIFのスタックにコンパイルされます。
ただし、条件の数がオーバーヘッドをカバーするのに十分な数である場合、C#コンパイラはHashTableオブジェクトを作成し、それに文字列定数を入力して、そのテーブルを検索してからジャンプします。ハッシュテーブルルックアップは厳密にはO(1)ではなく、顕著な一定のコストがかかりますが、ケースラベルの数が多い場合は、IFの各文字列定数と比較するよりも大幅に高速になります。
要約すると、条件の数が5程度を超える場合は、IFよりもSWITCHを優先します。それ以外の場合は、見栄えの良いものを使用します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加