ホーム ] TIPS ] ソフトウェア実験室 ]

上へ
ビットマップの処理速度
色変換速度
数式演算速度
冪乗演算速度
検索速度
文字列処理速度
文字列/数値処理速度
CPU演算速度
TicksとPerformance Counter
文字の数値化
数値化文字の再現
数値化文字の補間
補間の効果
ネイピア数
ネイピア数2
指数関数近似値
級数の収束速度1
級数の収束速度2
級数の精度
逆三角関数を求める
算術幾何平均でπを求める
全フォルダ列挙
ビットマップとメモリリソース
配列とメモリリソース

ソフトウェア実験室

配列とメモリリソース

最終更新:2006/10/18 新規

 配列も基本的に参照となるが、メモリの消費状態を目で確かめる。

●予備知識

 Dim A() As Long

では、配列は実施には生成されていない。この状態でA を参照するとエラーとなる。

 Dim A(1000) As Long
 ReDim A(10000)

などで、初めてメモリ上に生成される。

 ReDim A(0)
  A = Nothing
  Erase A     (A はダイナミック配列)

などで、余分なメモリが解放されるとある。

●実験

 Long配列を、1000000確保し、Eraseし、1500000を再確保する。その度に、確保された物理メモリサイズを計測する。

 


結果

コード

Dim EV As Environment
Dim AR() As Long

lstR.Items.Clear()
MS = EV.WorkingSet()
lstR.Items.Add((MS / 1024 / 1024).ToString("0.00") + "MB 初期")
ReDim AR(1000000)
MS = EV.WorkingSet()
lstR.Items.Add((MS / 1024 / 1024).ToString("0.00") + "MB 1000000確保")
Erase AR
Application.DoEvents()
MS = EV.WorkingSet()
lstR.Items.Add((MS / 1024 / 1024).ToString("0.00") + "MB Erase")
ReDim AR(1500000)
MS = EV.WorkingSet()
lstR.Items.Add((MS / 1024 / 1024).ToString("0.00") + "MB 1500000再確保")

●考察

 ReDim にて、確かにメモリは増加している。しかし、Erase しても解放はされていない。試しに、ReDim(0) でも同じであった。そのプロセスの間は、最大のメモリが維持されるようだ。