| 分類:[.NET 全般]
複数の大きなサイズの2次元の配列を使用したいのですが、 Dim bbb(500, 1000, 1000) As Single
のように宣言すると一つの全ての配列が2 GByte以内に収まらないとエラーとなります。
一方で、
Dim aaa(100000)(,) As Single
For i = 0 To 1000
ReDim aaa(i)(10000, 10000)
Next
のように宣言すると、それぞれの2次元配列が2GByteを超えなければ メモリの上限まで使用できるようです。
上記のコードを実行すると i = 167のところでエラーとなります。 この時のデータ量は 【167*10000*10000*4/1000/1000/1000】 66.8 GByte となります。
Dim aaa(100000)(,) As Short で試してみると i = 330でエラーとなります。 この時のデータ量は 【330*10000*10000*2/1000/1000/1000】 66 GByte となり、Singleの時とほぼ同じであることが分かります。
しかし、いま 32 GBのメモリを積んだWin10 64bit PCを使用しており、 66 GByteまで格納できるわけがないのですが、 なぜこのようなサイズになってもエラーにならないのでしょうか?
あと、タスクマネージャーでメモリ使用量を確認すると、 このような大きなメモリ使用量のコードを実行しても わずかしかメモリ使用量は増えず、ほとんど変動がありません。
なぜタスクマネージャーにはメモリ使用量が反映されないのでしょうか?
|