ソフトウェア実験室 |
配列とメモリリソース |
最終更新: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)
でも同じであった。そのプロセスの間は、最大のメモリが維持されるようだ。
|