【问题标题】:How to release memory after clear a Groupbox in c#c#中清除Groupbox后如何释放内存
【发布时间】:2017-07-09 10:55:19
【问题描述】:

我有一个名为“radGroupBox1”的组框,我想在其中打开一个用户控件。 这是我的代码:

radGroupBox1.Controls.Clear();

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

我的问题是每次执行这段代码,我的内存都会增加。我在任务管理器中查看。例如,如果您在 my button(run code) 上单击 10 次,内存将增加 10 倍。如何释放分配给前一个对象的内存? 有什么办法可以 Dispose 或者强制 GC 释放内存?

【问题讨论】:

  • 您是否正在某处关闭 (_main2.Close()) 表单?
  • @OfirWinegarten 我应该在哪里做这个?
  • 嗯...我猜你想关闭/隐藏用户控件。另外,为什么每次都重新创建它?为什么不只是隐藏/显示?不完全清楚你在做什么
  • @OfirWinegarten 因为我想展示一种全新的 _main2 形式。没有最后的改动
  • @dama 我在添加项目之前使用“Controls.Clear()”,这是否清除了我在 radGroupBox1 中的所有控件?

标签: c# winforms garbage-collection dispose


【解决方案1】:

正如您在documentation 中看到的那样:

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

所以这意味着你必须Dispose 用户自己控制。此外,请确保在用户控件内您正在处理任何一次性资源。

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

【讨论】:

    猜你喜欢
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 2020-09-10
    • 2015-09-13
    相关资源
    最近更新 更多