動的配列のメモリ解放

解決


kopo3  2009-10-19 17:38:28  No: 142673  IP: 192.*.*.*

大変お世話になります。
現在困っているプログラムの一部を抜粋します。VB2008です。

Dim chr_len() As Long = {247249719, 242951149, 199501827, 191273063, 180857866, 170899992, 158821424, 146274826, 140273252, 135374737, 134452384, 132349534, 114142980, 106368585, 100338915, 88827254, 78774742, 76117153, 63811651, 62435964, 46944323, 49691432, 154913754, 57772954}
dim j as long
Dim ChIPsignal() As Single

For j = 0 To 23
    Erase ChIPsignal
    ChIPsignal = Nothing
    ReDim ChIPsignal(chr_len(j))
    ・
    (処理)
    ・
next j

走らせると、j=4でメモリ不足ということでMessage="種類 'System.OutOfMemoryException' の例外がスローされました。"というエラーとともに止まります。
タスクマネージャを見ていると、メモリが解放されておらず、どんどん使用メモリが増えていくようなのですが、上記ではメモリが解放されないのでしょうか。

編集 削除
ひよこ  2009-10-19 18:37:35  No: 142674  IP: 192.*.*.*

GC.Collect()をChIPsignal = Nothing
の後にいれて

Dim chr_len() As Long = {247249719, 242951149, 199501827, 191273063, 180857866, 170899992, 158821424, 146274826, 140273252, 135374737, 134452384, 132349534, 114142980, 106368585, 100338915, 88827254, 78774742, 76117153, 63811651, 62435964, 46944323, 49691432, 154913754, 57772954}
dim j as long
Dim ChIPsignal() As Single

For j = 0 To 23
   
    ChIPsignal = Nothing
    GC.Collect()
    ReDim ChIPsignal(chr_len(j))
    ・
    (処理)
    ・
next j

としてみてはどうでしょうか?

編集 削除
kopo3  2009-10-20 06:44:58  No: 142675  IP: 192.*.*.*

ひよこさん、ありがとうございました。
解決致しました。
GCというのはGarbage Collectionなのですね。

編集 削除