C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

配列がメモリーに残ってしまう。

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■90831 / inTopicNo.1)  配列がメモリーに残ってしまう。
  
□投稿者/ ahou (1回)-(2019/04/27(Sat) 15:24:58)

分類:[.NET 全般] 


VB.NETでバックグラウンドプロセスを使ったプログラムを書いているのですが、


Dim s As Integer = 0
Parallel.For(1, 1001,
Sub(i As Integer)

Dim Array(1000, 300, 300) As Single


End Sub)

のように大きな配列を生成した時、
タスクマネージャー上で確認して、
数GB程度のメモリを使用しています。
しかし、その後、
バックグランドプロセスから抜けたにも拘わらず、
このメモリは解放されません。

毎回のループで
Array = Nothing
を入れてあげるとメモリは解放されます。

Forループの中で宣言された変数なら
Forループを抜けた時点で解放されると思うのですが
なぜ解放されないのでしょうか?


引用返信 編集キー/
■90832 / inTopicNo.2)  Re[1]: 配列がメモリーに残ってしまう。
□投稿者/ キングダム (19回)-(2019/04/28(Sun) 20:58:28)
No90831 (ahou さん) に返信

クロージャオブジェクトが作られて
そのメソッドの中のローカル変数なので
処理が終わったらGC対象になると思いました

たまたまなんじゃないですか
Nothing入れたらたまたまGCが行われたみたいな

メモリが解放されないってことは
処理を動かし続けてメモリオーバーフローが投げられるところまで確認しました?
引用返信 編集キー/
■90850 / inTopicNo.3)  Re[2]: 配列がメモリーに残ってしまう。
□投稿者/ Jitta (439回)-(2019/05/07(Tue) 11:47:10)
https://docs.microsoft.com/ja-jp/dotnet/standard/garbage-collection/large-object-heap
おそらくこれ
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ