-3

プログラムの速度が気になります。などのメソッドを使用するArray.GetLength(1)と、常に変数が返されintます。または、単一の数値を挿入すると、コンパイラはそれをint再び宣言します。それらを変数に変換してbyteメモリ使用量を下げる必要がありますか?そうしないと、プログラムの速度に影響しますか?

4

2 に答える 2

4

コンピュータが実行する算術演算に関しては、どちらも同じくらい高速です。

ただし、大量のデータがある場合はbyte、純粋にサイズが小さいため、大幅に高速になる可能性があります。

  1. CPU キャッシュには、byteオブジェクトよりも多くのオブジェクトが保持さintれます。
  2. オブジェクトの配列のすべての要素を使用すると、byteオブジェクトよりも必要なメモリ帯域幅が少なくなりintます。データベースを使用したり、ネットワーク経由でデータを送信したりする必要がある場合、この帯域幅の使用は非常に重要になります。
  3. コンピュータの RAM はbyte、ハード ディスクを仮想メモリとして使用する前に、より多くの値を保持できます。データセットがint仮想メモリを必要とするサイズであり、必要とbyteしないサイズであるbyte場合、はるかに高速になります。

バイトの唯一の本当の欠点はint、この変換が CPU で無料で行われる場合でも、頻繁に変換するコードを書くことになることです (ワード転送の代わりにレジスタへのバイト転送を使用します)。

于 2013-05-12T21:35:18.047 に答える
4

メソッド変数はスタック上にあります (注意: イテレータ ブロック、キャプチャされた変数など - しかし、それらについて心配する必要はありません)。スタックは、何をしても同じサイズになります。大幅に大きすぎる値型について話している場合、明らかな懸念はスタックの枯渇です (これはおそらく によって軽減できますrefが、それはこの質問には関係ありません) - しかし、ローカル メソッド変数を からintbyte変更しても、何も変わりません。 . 実際、IIRC の IL スタック操作は、4 または 8 バイト値に関してのみ定義されています。

基本的に、これはまったく役に立たないので、心配する必要はありません。ただし、アプリケーションのパフォーマンスやメモリ使用量にリモートで影響を与えることさえありません。とは何か知りたい場合、プロフィールをご覧ください。

于 2013-05-12T21:36:08.627 に答える