|
分類:[.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まで格納できるわけがないのですが、
なぜこのようなサイズになってもエラーにならないのでしょうか?
あと、タスクマネージャーでメモリ使用量を確認すると、
このような大きなメモリ使用量のコードを実行しても
わずかしかメモリ使用量は増えず、ほとんど変動がありません。
なぜタスクマネージャーにはメモリ使用量が反映されないのでしょうか?
|