概念を理解していないか、間違ったことをしている可能性があります。.NET でのメモリ管理についていくつか質問があります。
状況を想像してください:
Form1
MDI-parent と little のように、big man Form はFormChild
子としてバインドされます。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void simpleButton1_Click(object sender, EventArgs e)
{
FormChild formChild = new FormChild();
formChild.MdiParent = this;
formChild.Show();
}
}
ここで、子はシミュレーションとして少しメモリを割り当てています。
public partial class FormChild : Form
{
private readonly List<byte[]> _list = new List<byte[]>();
public FormChild()
{
InitializeComponent();
}
private void FormChild_Load(object sender, EventArgs e)
{
int i = 0;
while (i < 100)
{
_list.Add(new byte[1024 * 1024 * 10]);
i += 1;
}
}
}
現在、メモリ ヒープで何が起こっているかをメモリ プロファイラーで調べています。ボタンをクリックすると、メモリが割り当てられます。次に、を閉じるFormChild
と、が呼び出されますDispose()
。しかし、メモリはまだ割り当てられています。もう一度クリックすると、発生しSystem.OutOfMemoryException
ます。
GC がマネージド メモリの解放を待機しているのはなぜですか? それとも私の設計ミスですか?