我正在开发一个 WinForms 应用程序,我需要将大量 UserControl 项动态添加到 FlowLayoutPanel 中。当前的方法有效,但存在明显的性能问题,特别是在一次添加大量控件时。
这是我正在使用的简化代码:
flowLayoutPanel.SuspendLayout();
foreach (var item in items)
{
var userControl = new MyUserControl();
flowLayoutPanel.Controls.Add(userControl);
}
flowLayoutPanel.ResumeLayout();
我最终需要将 5 个 flowLayoutPanel 添加到我的面板中,其中每个 flowLayoutPanel 都有大约 10 个用户控件。
单用户控件并不先进,它只是一个带有 4 个文本框、标签、2 个面板的面板:
我尝试过的:
这些尝试都没有显着提高性能。
当您遇到此类问题时,您的性能问题可能源于两个不同的可能来源:要么您的逻辑速度慢,导致进程变慢,要么图形显示速度慢。因此,首先进行一些测量并确定哪条线速度慢:
flowLayoutPanel.SuspendLayout()
var userControl = new MyUserControl()
flowLayoutPanel.Controls.Add(userControl)
flowLayoutPanel.ResumeLayout()
请注意,第二个和第三个是重复操作,您最好在循环内重复测量它们的时间使用情况并计算其总和。
如果你与
MyUserControl
相关的逻辑很慢,那么你需要优化它。如果添加速度很慢,那么您会遇到图形问题,并且在添加之前将新创建的 IsVisible
设置为 false
是有意义的。如果暂停或恢复布局很慢,则说明存在图形问题。无论如何,您需要进行上述研究,它有可能解决您的问题。反复重新渲染图形速度很慢,因此需要检测是否发生。也有可能发生这种情况,但由于其他原因。