我有一个WinForms性能问题可能与我动态添加然后删除数百个控件有关.
编辑{ 应用程序显示一个时间轴,其中包含表示历史事件的控件.根据您跳转的时间添加,删除或移动控件.性能问题不仅在控件的添加和删除期间(我可以忍受),但即使在我跳转到没有历史事件的时间(意味着当前没有显示控件).在跳转并到达时间线上没有事件的时间之后,GUI中的一些活动仍然需要很长时间才能完成,例如打开菜单或打开对话框.奇怪的是,其他GUI活动,如按下按钮,不会停止.}
虽然内存消耗非常稳定,但仍然存在释放资源的问题吗?
为了删除控件,我做了两件事:
containerPanel.Controls.Remove(control).谢谢!
正如您已经观察到的那样,这不是内存问题.我的猜测是,问题是一个简单的事实,你的程序需要经常刷新屏幕.如果您在一个批次中删除并添加"数百个控件",则可以尝试禁用屏幕刷新,直到完成为止.
您可以使用SuspendLayout和执行此操作ResumeLayout:
SuspendLayout();
for(...)
AddControl(...);
ResumeLayout();
Run Code Online (Sandbox Code Playgroud)
和
SuspendLayout();
for(...)
RemoveControl(...);
ResumeLayout();
Run Code Online (Sandbox Code Playgroud)