c# - 从容器中删除控件的最干净的方法是什么?

标签 c# .net winforms

我遇到 WinForms 性能问题,这可能与我动态添加然后删除数百个控件有关。

编辑{ 该应用程序显示一个时间线,其中包含代表历史事件的控件。添加、删除或移动控件,具体取决于您跳转到的时间。性能问题不仅出现在添加和删除控件期间(我可以忍受),而且甚至在我跳转到没有历史事件的时间(意味着当前没有显示控件)之后也是如此。在跳转并到达时间线上没有事件的时间后,GUI 中的某些事件仍然需要很长时间才能完成,例如打开菜单或打开对话框。奇怪的是其他 GUI 事件,例如按下按钮,不会停止。

虽然内存消耗非常稳定,但会不会是资源释放有问题?

为了删除控件,我做了两件事:

  1. 取消注册所有事件的回调,
  2. 调用 containerPanel.Controls.Remove(control)

谢谢!

最佳答案

正如您已经观察到的,这不是内存问题。我的猜测是,问题是一个简单的事实,即您的程序需要经常刷新屏幕。如果您批量删除和添加那些“数百个控件”,您可以尝试禁用屏幕刷新,直到完成为止。
您可以使用 SuspendLayout 执行此操作和 ResumeLayout :

SuspendLayout();
for(...)
    AddControl(...);
ResumeLayout();

SuspendLayout();
for(...)
    RemoveControl(...);
ResumeLayout();

关于c# - 从容器中删除控件的最干净的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6166572/

相关文章:

c# - 日期时间格式不正确?

c# - Linq 中的 SQL YEAR(),MONTH()

.net - MSBuild 4.0 在 XMLQuery 任务(来自 MSBuild 社区任务包)上失败,并出现错误 MSB4018

c# - 事件处理程序是否保证在 UI 线程上运行

c# - textbox.enabled 为 false 时如何启用复制?

C# - 有人能告诉我为什么以及在哪里应该使用委托(delegate)吗?

c# - 关闭应用程序的计时器

c# - 是否可以在同一个 AppDomain 上托管 WebMethods 和 ASP.NET 应用程序?

.net - 在 C++/CLI 中创建具有空维度大小的多维数组

c# - 如何使用 C#、.NET 将文本写入 Word 文件