2017-07-09 96 views
0

我有一个名为“radGroupBox1”的groupbox,我想在其中打开一个用户控件。 这是我的代码:如何在c中清除Groupbox后释放内存#

radGroupBox1.Controls.Clear(); 

_main2 = new Forms.MainControl2(); 
radGroupBox1.Controls.Add(_main2); 
_main2.Dock = DockStyle.Fill; 
_main2.Frm = this; 
_main2.Show(); 

我的问题是我每次执行该代码时,我的内存增加。我在任务管理器中检查它。例如,如果您在我的按钮上单击10次(运行代码),内存将增加10次。我如何释放内存分配给以前的对象? 有什么办法可以解决它或强制GC释放内存?

+0

你在关闭('_main2.Close()')窗体吗? –

+0

@OfirWinegarten我应该怎么做? – mosyflasher

+0

嗯......我想在你想关闭/隐藏用户控件的地方。你为什么每次都重新创建它?为什么不只是隐藏/显示?它并不完全清楚你在做什么 –

回答

3

正如你在读documentation

调用清除方法不会从内存中删除控制手柄。您必须显式调用Dispose方法以避免内存泄漏。

所以这意味着你必须Dispose用户自己控制。此外,请确保在用户控制内部处理任何可支配资源。

radGroupBox1.Controls.Clear(); 
_main2?.Dispose(); 
_main2 = new Forms.MainControl2(); 
radGroupBox1.Controls.Add(_main2); 
_main2.Dock = DockStyle.Fill; 
_main2.Frm = this; 
_main2.Show();