2010-08-06 90 views
0

我试图实现增强的TabControl/TabPage类,以实现真正的TabVisible功能,因为TabPage的可见性属性不能按预期方式工作。TabVisible解决方法 - 内存泄漏

我正在使用C#/ WinForms/VS2005/.Net FW 2.0;我已经实现了这样的代码:

http://csharp.pastebin.com/AUnzRQLw

而且我做了一个表格,以测试它,选中/取消选中复选框来显示/隐藏我已经添加了一些VisibleTabPage控制(HTTP ..// csharp.pastebin.com/MkGJGx2G)。但是,在CheckBox的点击次数为 之后,应用程序开始分配越来越多的内存,并使用相当数量的CPU来显示/隐藏TabPage控件。

任何人都可以指出我错在哪里?

+0

我会建议验证您是否在复选框状态发生变化时重新初始化您的选项卡页面。验证这一点的最好方法是下载任何好的分析器(Windbg等)并查明内存中存在哪些对象。 – 2010-08-06 15:49:01

+0

是的,我用过内存分析器,发现ArrayList对象是罪魁祸首。我创建了一个私有的ArrayList,我在TabControlEx对象的整个生命周期中维护这个私有ArrayList,并解决了这个问题。 – Alexandre 2010-08-06 20:09:51

回答

1

这是一个有点太多的代码来摔跤。然而,我看到你使用Remove()和Clear()这样的方法,而不用为标签页调用Dispose()方法。这些页面被“停放”并将继续使用系统资源。运行Taskmgr.exe,进程选项卡,查看+选择列,勾选User32对象。你可能会看到这个数字没有限制,因为你的代码泄漏了标签页及其所有控件的Handle。

+0

我发现了这个bug,它是初始化了很多次的ArrayList。我创建了一个私有的ArrayList,我在TabControlEx对象的整个生命周期中维护这个私有ArrayList,并解决了这个问题。无论如何感谢提示。 – Alexandre 2010-08-06 20:08:18