很抱歉,如果我失去了一些东西很明显,但我试图清除一个FlowLayoutPanel中的控件(一系列的用户控件) - (panelName).Controls.Clear();. 不幸的是这似乎并没有被要求在面板上的对象的析构函数 - 用户在任务管理器对象列只是不断上升和起来,直到达到10000抛出excecption。
有谁知道我在这里失踪?
很抱歉,如果我失去了一些东西很明显,但我试图清除一个FlowLayoutPanel中的控件(一系列的用户控件) - (panelName).Controls.Clear();. 不幸的是这似乎并没有被要求在面板上的对象的析构函数 - 用户在任务管理器对象列只是不断上升和起来,直到达到10000抛出excecption。
有谁知道我在这里失踪?
不是一个解决方案,但有解决方法 - 对象似乎被这个破坏(粗糙,从内存中)的代码:
while(FlowLayoutPanel.Controls.Count > 0)
FlowLayoutPanel.Controls.Remove(0);
eftpotrm的解决方法上面仍然保存在用户处理数量不断增长的对我,但是,如果你只是手动配置卸下控制后,即固定它100%的我。
while (myFlowLayoutPanel.Controls.Count > 0)
{
var controltoremove = myFlowLayoutPanel.Controls[0];
myFlowLayoutPanel.Controls.Remove(controltoremove);
controltoremove.Dispose();
}
.NET没有析构函数的概念。 .NET有一些所谓的“终结”,这看起来像语法在C#中的析构函数。 -欲了解更多信息,请杰夫·里希特的真棒书中对CLR是如何工作的通过C#CLR 。
您可能希望当你与他们所做的对象来实现IDisposable模式,然后调用其Dispose()方法。
尝试使用内存分析器 (如蚂蚁 ),它会告诉你什么是保持控制活着。 试图第二猜测这种类型的问题是非常困难。
红门给14天尾部应该是更多然后足够的时间来钉下这个问题,并决定,如果一个内存分析器为您提供长期价值。
有很多的市场(例如,在其他内存分析器的.NET内存分析器 )大多有免费试用,但我发现, 红门工具很容易使用,所以往往先尝试一下。