我遇到 WinForms 性能问题,这可能与我动态添加然后删除数百个控件有关。
编辑{ 该应用程序显示一个时间线,其中包含代表历史事件的控件。添加、删除或移动控件,具体取决于您跳转到的时间。性能问题不仅出现在添加和删除控件期间(我可以忍受),而且甚至在我跳转到没有历史事件的时间(意味着当前没有显示控件)之后也是如此。在跳转并到达时间线上没有事件的时间后,GUI 中的某些事件仍然需要很长时间才能完成,例如打开菜单或打开对话框。奇怪的是其他 GUI 事件,例如按下按钮,不会停止。
虽然内存消耗非常稳定,但会不会是资源释放有问题?
为了删除控件,我做了两件事:
- 取消注册所有事件的回调,
- 调用
containerPanel.Controls.Remove(control)
。
谢谢!
最佳答案
正如您已经观察到的,这不是内存问题。我的猜测是,问题是一个简单的事实,即您的程序需要经常刷新屏幕。如果您批量删除和添加那些“数百个控件”,您可以尝试禁用屏幕刷新,直到完成为止。
您可以使用 SuspendLayout
执行此操作和 ResumeLayout
:
SuspendLayout();
for(...)
AddControl(...);
ResumeLayout();
和
SuspendLayout();
for(...)
RemoveControl(...);
ResumeLayout();
关于c# - 从容器中删除控件的最干净的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6166572/