[解決済み】C#でif/elseとswitch-caseを使うことに大きな違いはあるのでしょうか?
2022-04-01 06:51:25
質問
を使用するメリット/デメリットは何ですか?
switch
ステートメントと
if/else
をC#で作成します。 コードの見た目以外に、それほど大きな違いがあるとは思えません。
出来上がったILや関連する実行時のパフォーマンスが根本的に異なる理由はあるのでしょうか?
関連する switch on string と elseif on type はどちらが速いですか?
解決方法は?
SWITCH文は、デバッグモードや互換モードでは、IFと同じアセンブリしか生成されません。リリースでは、(MSILのswitch文を通して)ジャンプテーブルにコンパイルされます - これはO(1)です。
C#は(他の多くの言語と異なり)文字列定数のスイッチも可能ですが、これは少し異なる動作をします。任意の長さの文字列に対してジャンプテーブルを作成するのは明らかに現実的ではないので、ほとんどの場合、このようなスイッチはIFのスタックにコンパイルされます。
しかし、条件の数がオーバーヘッドをカバーできるほど大きい場合、C#コンパイラはHashTableオブジェクトを作成し、そこに文字列定数を入力し、そのテーブルを検索してジャンプを実行します。ハッシュテーブルの検索は厳密にはO(1)ではなく、定数コストが顕著ですが、ケースラベルの数が多ければ、IFで各文字列定数と比較するよりも大幅に高速になります。
まとめると、条件の数が5つ以上ある場合はIFよりもSWITCHを、そうでない場合は見栄えの良いものを使うということです。
関連
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] SelectとSelectManyの違い
-
[解決済み] キーワード「ref」と「out」の違いは何ですか?
-
[解決済み] C#の==とEquals()の違いについて
-
[解決済み] このスイッチ/パターンマッチングの考え方にメリットはあるのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】WebResource.axdとは何ですか?
-
[解決済み] switch() case」よりも「else if」の方が速い?重複] [重複] [重複] [重複
-
[解決済み] C#のSwitch文のフォールスルー?
-
[解決済み] Switch文のフォールスルー...許されるのか?[クローズド]