C# 2008 では、配列が保持できる最大サイズはどれくらいですか?
ベストアンサー1
System.Int32.MaxValue
System.Array
、つまり通常定義される配列 (など)を意味していると仮定しますint[]
。これは、配列が保持できる値の最大数です。各値のサイズは、それらを保持するために使用できるメモリまたは仮想メモリの量によってのみ制限されます。
この制限は、System.Array
が をインデクサーとして使用するため適用されますInt32
。したがって、 に有効な値のみをInt32
使用できます。さらに、正の値 (つまり>= 0
) のみを使用できます。つまり、配列のサイズの絶対最大上限は の値の絶対最大上限でありInt32
、これは で使用可能でInt32.MaxValue
、2^31、つまり約 20 億に相当します。
まったく別の話ですが、もしあなたがこれを心配しているなら、おそらくあなたはたくさんデータの配列は、正しくても間違っていても、正しくありません。この場合、List<T>
配列の代わりに を使用することを検討します。そうすれば、必要なメモリだけが使用されます。実際、List<T>
または他の汎用コレクション タイプを常に使用することをお勧めします。つまり、実際に使用するメモリだけが割り当てられますが、通常の配列と同じように使用できます。
注目すべきもう 1 つのコレクションはDictionary<int, T>
、通常の配列のように使用できますが、まばらにしか設定されません。たとえば、次のコードでは、配列が作成する 1000 個の要素ではなく、1 つの要素のみが作成されます。
Dictionary<int, string> foo = new Dictionary<int, string>();
foo[1000] = "Hello world!";
Console.WriteLine(foo[1000]);
を使用するとDictionary
、インデクサーの型を制御することもでき、負の値を使用することもできます。絶対最大サイズのスパース配列の場合は を使用できます。Dictionary<ulong, T>
これにより、考えられるよりも多くの潜在的な要素が提供されます。