清除从FlowLayoutPanel的不调用析构函数控制?(Clearing controls fr

2019-08-03 18:02发布

很抱歉,如果我失去了一些东西很明显,但我试图清除一个FlowLayoutPanel中的控件(一系列的用户控件) - (panelName).Controls.Clear();. 不幸的是这似乎并没有被要求在面板上的对象的析构函数 - 用户在任务管理器对象列只是不断上升和起来,直到达到10000抛出excecption。

有谁知道我在这里失踪?

Answer 1:

不是一个解决方案,但有解决方法 - 对象似乎被这个破坏(粗糙,从内存中)的代码:

while(FlowLayoutPanel.Controls.Count > 0)
     FlowLayoutPanel.Controls.Remove(0);


Answer 2:

eftpotrm的解决方法上面仍然保存在用户处理数量不断增长的对我,但是,如果你只是手动配置卸下控制后,即固定它100%的我。

while (myFlowLayoutPanel.Controls.Count > 0)
{
     var controltoremove = myFlowLayoutPanel.Controls[0];
     myFlowLayoutPanel.Controls.Remove(controltoremove);
     controltoremove.Dispose();
}


Answer 3:

.NET没有析构函数的概念。 .NET有一些所谓的“终结”,这看起来像语法在C#中的析构函数。 -欲了解更多信息,请杰夫·里希特的真棒书中对CLR是如何工作的通过C#CLR 。

您可能希望当你与他们所做的对象来实现IDisposable模式,然后调用其Dispose()方法。



Answer 4:

尝试使用内存分析器 (如蚂蚁 ),它会告诉你什么是保持控制活着。 试图第二猜测这种类型的问题是非常困难。

红门给14天尾部应该是更多然后足够的时间来钉下这个问题,并决定,如果一个内存分析器为您提供长期价值。

很多的市场(例如,在其他内存分析器的.NET内存分析器 )大多有免费试用,但我发现, 红门工具很容易使用,所以往往先尝试一下。



文章来源: Clearing controls from FlowLayoutPanel not calling destructors?