動的配列のメモリ解放

解決


kopo3  2009-10-20 02:38:28  No: 142673

大変お世話になります。
現在困っているプログラムの一部を抜粋します。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-20 03:37:35  No: 142674

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 15:44:58  No: 142675

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加