我有一个包含大约200个控件的C#窗体程序。其中一些控件位于我添加到窗体的用户控件中。当我在我的家用机器上运行程序时,它很好地运行,速度快,重绘也不是问题。但是当我将此程序放在我的桌面电脑上(四核Intel 2.4Ghz、4GB RAM和NVidia Gefore 8800GT),它在重绘时变得非常缓慢。这可能是驱动程序问题吗?我已经为所有用户控件和窗体启用了双缓冲,但没有任何帮助。我已经阅读了这个帖子,但我的情况并不相同:Super slow C# custom control。
问题是“.SuspendLayout();”并不能真正停止绘图。我记不清语句了,但我相信你可以在谷歌上找到它。 尝试使用.AddRange可能会有帮助。
需要注意的是,绘制控件就像在二维表面上绘画一样,需要重叠。如果控件不理解诸如矩形剪切之类的东西,它可能会绘制一个不可见的控件部分(特别是隐藏在另一个容器中的控件,例如TabPage),浪费宝贵的CPU周期。此外,将BackColor设置为透明的控件将尝试通过采用其父控件的BackColor来模拟透明度。由于所有这些都发生在未经硬件加速的GDI+上,因此具有此行为的许多控件将加剧减速。