16

私の質問は基本的に、C# コンパイラが小さなデータ型のメモリ割り当てをどのように処理するかについてです。たとえば、add のような演算子は short ではなく int で定義されているため、short が int メンバーであるかのように計算が実行されることは知っています。

以下を仮定します。

  • データ型として short を選択することに関連するビジネス ロジック/検証ロジックはありません。
  • 安全でないコードは使用していません

可能な限り short データ型を使用すると、アプリケーションのメモリ フットプリントが削減されますか? また、そうすることをお勧めしますか? または、たとえば、コンパイラが int32 の完全なメモリ量を割り当て、算術を行うときに追加のキャストを追加するため、short などを使用する価値はありません。

想定される実行時のパフォーマンスへの影響に関するリンクは大歓迎です。

関連する質問:

C# で byte または short の代わりに int を使用する必要があるのはなぜですか

整数和ブルース、短い += 短い問題

4

5 に答える 5

11

メモリのみの観点からは、short代わりにを使用intする方が適切です。単純な理由は、 変数はメモリ内shortの変数の半分のサイズしか必要としないからです。CLR はメモリ内に展開されintません。shortint

それでも、このメモリ消費量の削減により、アプリケーションのランタイム パフォーマンスが大幅に低下する可能性があります。最近のすべての CPU は、16 ビットの数値よりも 32 ビットの数値の方がはるかに優れたパフォーマンスを発揮します。さらに、多くの場合、CLR は、引数を取るメソッドを呼び出すときshortなどに変換する必要があります。この方法に進む前に、実行する必要があるパフォーマンスに関する考慮事項が他にもたくさんあります。intint

アプリケーションの非常に専用の場所とモジュールでのみ、測定可能なメモリ不足が実際に発生した場合にのみ、これを変更します。

もちろん場合によっては、パフォーマンスを損なうことなく簡単にからintに切り替えることができます。1 つの例は、すべてが s にも適合する s のshort巨大な配列です。intshort

于 2011-06-01T08:43:47.700 に答える
1

要するに-はい。ただし、メモリの配置にも注意する必要があります。あなたはC#構造体とクラスのメモリアライメントをC#でマスターするのを見つけるかもしれません使える

于 2011-06-01T08:40:45.937 に答える
1

プログラムにこれらの型の非常に大きな配列 (または のような配列で構築されたコレクション) がある場合、または同じもので構成されるパックされた構造体の配列がある場合にのみ、メモリ使用量の観点から意味があります。List<>「大きい」とは、これらの配列の合計メモリ フットプリントが、ワーキング セットの大部分と使用可能なメモリの大部分であることを意味します。妥当性については、プログラムが操作するデータが明示的に指定されていない限りshort、またはデータの量がギガバイトに達しない限り、短い型を使用することはお勧めできません。

于 2011-06-01T08:38:18.190 に答える
0

ショーツの用途によって異なります。また、メモリフットプリントが問題になるほど多くの変数を割り当てていますか?

このプログラムがモバイル デバイスまたはメモリ制限のあるデバイスで使用される場合は、心配になるかもしれません。ただし、今日のほとんどのマシンは、少なくとも 1 ~ 2 GB の RAM を実行しており、かなりまともなデュアル コア プロセッサを搭載しています。また、今日のほとんどのモバイル デバイスは、ビースト ミニ コンピューターになりつつあります。そのタイプのマシンが死に始めるほど宣言している場合は、コードにすでに問題があります。

ただし、質問への回答です。メモリが限られたマシンでは、2 バイトの変数だけで埋める必要があるのに 4 バイトの変数を大量に宣言する場合、おそらく short を使用する必要があります。

複雑な計算、平方根など、または高値の計算を実行する場合。次に、データを失うリスクがないように、おそらくより多くのバイトで変数を使用する必要があります。必要なときに必要なものを宣言するだけです。メモリの制限が心配な場合は、C# が確実にクリーンアップするように、使い終わったらゼロにしてください。

于 2011-06-01T08:39:27.817 に答える