【问题标题】:Disposing a TabPage control and its controls释放 TabPage 控件及其控件
【发布时间】:2013-02-28 22:44:31
【问题描述】:

我的应用程序使用TabControl 来显示数据,每次用户请求数据时,应用程序都会创建一个新的TabPage,其中包含许多控件(PictureBox 控件、Label 控件等)。用户在某些时候会关闭他已完成使用的TabPage 控件。现在这里的问题是关闭的TabPage 控件,它们会堆积在内存中,导致程序使用很大一部分内存。从TabControl 中删除TabPage 控件不会释放它,也不会释放其中的项目,它只是隐藏它,但控件仍然挂在内存中。

我用来删除TabPage 的代码类似于:

tabControl.TabPages.Remove(myTabPage);
myTabPage.Dispose();   

问:如何完全摆脱 TabPage 控件?

【问题讨论】:

  • CL4PTR4P - 这不是他尝试了什么的问题。很明显,他尝试了一些东西。我要问的问题是查看他编写的源代码,看看他目前的处理方式当前选项卡
  • @DJKRAZE - 从我读到的内容来看,我认为他根本没有处理它们
  • @DJKRAZE:是的,他尝试过“某事”,但那是什么?但你说得有道理,这里的代码也会有所帮助。
  • Brian 正是我建议显示代码的原因。这里有太多的 OP 想要快速的答案,我可以根据 HaLaBi 的问题来判断,他已经展示/付出了一些个人努力他提出的问题表明......现在如果我们能看到一些代码,那么我们将能够提供可行的解决方案
  • @DJKRAZE 我已经包含了一些代码。这就是我通常处理它们的方式。

标签: c# .net memory-leaks user-controls tabcontrol


【解决方案1】:

您可以每次都通过与之关联的标签页控件进行迭代,并在循环中处理它们。

            tabControl1.TabPages[0].Controls[i].Dispose();

【讨论】:

  • 我认为这不会解决问题,处置父控件应该处置其子控件。
【解决方案2】:

调用 myTabPage.Dispose() 应该释放 TabPage 及其子项的资源。但是,这些对象使用的内存不一定会被 GC 立即释放,即使这些对象没有被其他对象引用。

在内存非常大的计算机中,GC 往往是惰性的。只要稍后会释放内存,比如几分钟后,您就不必担心。

【讨论】:

  • @HaLaBi,如果你告诉我们如何你肯定会很好。你为什么不强制垃圾回收,看看那些对象是否还在内存中。
猜你喜欢
  • 2023-03-15
  • 2021-08-03
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多