C#でif / elseとswitch-caseを使用することに大きな違いはありますか?

マシュー・M・オズボーン

switchステートメントを使用することif/elseとC#で使用することのメリット/デメリットは何ですかコードの見た目以外に、それほど大きな違いがあるとは想像できません。

結果のILまたは関連するランタイムパフォーマンスが根本的に異なる理由はありますか?

関連:文字列をオンにするか、タイプをオンにするのが速いですか?

有る

SWITCHステートメントは、デバッグモードまたは互換モードのIFと同じアセンブリのみを生成します。リリースでは、(MSILの 'switch'ステートメントを介して)ジャンプテーブルにコンパイルされます-これはO(1)です。

C#(他の多くの言語とは異なり)では、文字列定数をオンにすることもできます。これは、動作が少し異なります。任意の長さの文字列のジャンプテーブルを作成することは明らかに実用的ではないため、ほとんどの場合、このようなスイッチはIFのスタックにコンパイルされます。

ただし、条件の数がオーバーヘッドをカバーするのに十分な数である場合、C#コンパイラはHashTableオブジェクトを作成し、それに文字列定数を入力して、そのテーブルを検索してからジャンプします。ハッシュテーブルルックアップは厳密にはO(1)ではなく、顕著な一定のコストがかかりますが、ケースラベルの数が多い場合は、IFの各文字列定数と比較するよりも大幅に高速になります。

要約すると、条件の数が5程度を超える場合は、IFよりもSWITCHを優先します。それ以外の場合は、見栄えの良いものを使用します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C#でif / elseとswitch-caseを使用することに大きな違いはありますか?

分類Dev

ListViewActivityを拡張することと、IDでリストビューを作成することとの間に大きな違いはありますか?

分類Dev

この使用例では、TCP_CORKとTCP_NODELAYの間に大きな違いはありますか?

分類Dev

GridViewでDynamicHyperLinkとLinkButtonを使用することに違いはありますか?

分類Dev

JavaScriptで関数に変数を割り当てることと、C#でデリゲートを使用することには違いがありますか?

分類Dev

トルネードのAsyncHTTPClientを使用することと、run_in_executor()でブロッキングhttp呼び出しをラップすることとの間に大きな違いはありますか?

分類Dev

XCodeとInstrumentsのメモリ使用量に大きな違いがあるのはなぜですか?それで問題ありませんか?

分類Dev

Webサービスメソッドに送信するときに、配列を使用することと、C#でリストを配列に変換することの間に違いはありますか?

分類Dev

どこで測定するかによって経過時間を測定するときに大きな違いがあるのはなぜですか?

分類Dev

NestJSで動的モジュールを作成するときに `forRoot`と` register`を使用することに違いはありますか?

分類Dev

不要なelseステートメント:IFだけを使用できる場合にELSE IFを使用することに不利な点はありますか?

分類Dev

大なり記号の代わりにJavaScriptを使用することはできますか?

分類Dev

辞書初期化子で角括弧と中括弧を使用することに違いはありますか?

分類Dev

ある文字列が別の文字列よりも大きいことを定義するにはどうすればよいですか?(C#)(初心者)

分類Dev

単一の高密度レイヤーでTimeDistributedを使用することに違いはありますか?

分類Dev

null許容の有効なc#環境でまだNotNull属性を使用することは役に立ちますか?それとも違いはありませんか?

分類Dev

参照を使用することと、Rustで所有値を使用することには違いがありますか?

分類Dev

psとfreeのメモリ使用量に大きな違いがあるのはなぜですか?

分類Dev

DebianSqueezeでext3とext4を使用したfsckの速度に大きな違いがあります

分類Dev

コマンドの前にname-value-pairを追加することと、bashでenvを使用することには違いがありますか?

分類Dev

Avroでは、GenericRecordでtoString()を呼び出すこととJSONEncoderを使用することの間に違いはありますか?

分類Dev

Avroでは、GenericRecordでtoString()を呼び出すこととJSONEncoderを使用することの間に違いはありますか?

分類Dev

メディアクエリで最小幅と最大幅を使用することに実際的な違いはありますか?

分類Dev

JavaScriptでオブジェクトを拡張することとまったく拡張しないことには違いがありますか?

分類Dev

Redshiftで大きなVARCHAR値を作成することの欠点はありますか?

分類Dev

ビットマップでMatrix.polyToPoly()を使用するときにビットマップを拡大しない方法はありますか?

分類Dev

C#(Unity)で静的一時変数を使用することに何か利点はありますか?

分類Dev

パラメータ `&block`のあるメソッドで` yield self`を使用することと、パラメータ `&block`のないメソッドで` yield self`を使用することに違いはありますか?

分類Dev

あなたがあなたのマシンの唯一のユーザーであるときに `sudo`を使用することに意味はありますか?

Related 関連記事

  1. 1

    C#でif / elseとswitch-caseを使用することに大きな違いはありますか?

  2. 2

    ListViewActivityを拡張することと、IDでリストビューを作成することとの間に大きな違いはありますか?

  3. 3

    この使用例では、TCP_CORKとTCP_NODELAYの間に大きな違いはありますか?

  4. 4

    GridViewでDynamicHyperLinkとLinkButtonを使用することに違いはありますか?

  5. 5

    JavaScriptで関数に変数を割り当てることと、C#でデリゲートを使用することには違いがありますか?

  6. 6

    トルネードのAsyncHTTPClientを使用することと、run_in_executor()でブロッキングhttp呼び出しをラップすることとの間に大きな違いはありますか?

  7. 7

    XCodeとInstrumentsのメモリ使用量に大きな違いがあるのはなぜですか?それで問題ありませんか?

  8. 8

    Webサービスメソッドに送信するときに、配列を使用することと、C#でリストを配列に変換することの間に違いはありますか?

  9. 9

    どこで測定するかによって経過時間を測定するときに大きな違いがあるのはなぜですか?

  10. 10

    NestJSで動的モジュールを作成するときに `forRoot`と` register`を使用することに違いはありますか?

  11. 11

    不要なelseステートメント:IFだけを使用できる場合にELSE IFを使用することに不利な点はありますか?

  12. 12

    大なり記号の代わりにJavaScriptを使用することはできますか?

  13. 13

    辞書初期化子で角括弧と中括弧を使用することに違いはありますか?

  14. 14

    ある文字列が別の文字列よりも大きいことを定義するにはどうすればよいですか?(C#)(初心者)

  15. 15

    単一の高密度レイヤーでTimeDistributedを使用することに違いはありますか?

  16. 16

    null許容の有効なc#環境でまだNotNull属性を使用することは役に立ちますか?それとも違いはありませんか?

  17. 17

    参照を使用することと、Rustで所有値を使用することには違いがありますか?

  18. 18

    psとfreeのメモリ使用量に大きな違いがあるのはなぜですか?

  19. 19

    DebianSqueezeでext3とext4を使用したfsckの速度に大きな違いがあります

  20. 20

    コマンドの前にname-value-pairを追加することと、bashでenvを使用することには違いがありますか?

  21. 21

    Avroでは、GenericRecordでtoString()を呼び出すこととJSONEncoderを使用することの間に違いはありますか?

  22. 22

    Avroでは、GenericRecordでtoString()を呼び出すこととJSONEncoderを使用することの間に違いはありますか?

  23. 23

    メディアクエリで最小幅と最大幅を使用することに実際的な違いはありますか?

  24. 24

    JavaScriptでオブジェクトを拡張することとまったく拡張しないことには違いがありますか?

  25. 25

    Redshiftで大きなVARCHAR値を作成することの欠点はありますか?

  26. 26

    ビットマップでMatrix.polyToPoly()を使用するときにビットマップを拡大しない方法はありますか?

  27. 27

    C#(Unity)で静的一時変数を使用することに何か利点はありますか?

  28. 28

    パラメータ `&block`のあるメソッドで` yield self`を使用することと、パラメータ `&block`のないメソッドで` yield self`を使用することに違いはありますか?

  29. 29

    あなたがあなたのマシンの唯一のユーザーであるときに `sudo`を使用することに意味はありますか?

ホットタグ

アーカイブ