プログラムの速度が気になります。などのメソッドを使用するArray.GetLength(1)
と、常に変数が返されint
ます。または、単一の数値を挿入すると、コンパイラはそれをint
再び宣言します。それらを変数に変換してbyte
メモリ使用量を下げる必要がありますか?そうしないと、プログラムの速度に影響しますか?
2 に答える
コンピュータが実行する算術演算に関しては、どちらも同じくらい高速です。
ただし、大量のデータがある場合はbyte
、純粋にサイズが小さいため、大幅に高速になる可能性があります。
- CPU キャッシュには、
byte
オブジェクトよりも多くのオブジェクトが保持さint
れます。 - オブジェクトの配列のすべての要素を使用すると、
byte
オブジェクトよりも必要なメモリ帯域幅が少なくなりint
ます。データベースを使用したり、ネットワーク経由でデータを送信したりする必要がある場合、この帯域幅の使用は非常に重要になります。 - コンピュータの RAM は
byte
、ハード ディスクを仮想メモリとして使用する前に、より多くの値を保持できます。データセットがint
仮想メモリを必要とするサイズであり、必要とbyte
しないサイズであるbyte
場合、はるかに高速になります。
バイトの唯一の本当の欠点はint
、この変換が CPU で無料で行われる場合でも、頻繁に変換するコードを書くことになることです (ワード転送の代わりにレジスタへのバイト転送を使用します)。
メソッド変数はスタック上にあります (注意: イテレータ ブロック、キャプチャされた変数など - しかし、それらについて心配する必要はありません)。スタックは、何をしても同じサイズになります。大幅に大きすぎる値型について話している場合、明らかな懸念はスタックの枯渇です (これはおそらく によって軽減できますref
が、それはこの質問には関係ありません) - しかし、ローカル メソッド変数を からint
にbyte
変更しても、何も変わりません。 . 実際、IIRC の IL スタック操作は、4 または 8 バイト値に関してのみ定義されています。
基本的に、これはまったく役に立たないので、心配する必要はありません。ただし、アプリケーションのパフォーマンスやメモリ使用量にリモートで影響を与えることさえありません。とは何か知りたい場合は、プロフィールをご覧ください。