C#自定义控件重绘速度慢

3
我有一个包含大约200个控件的C#窗体程序。其中一些控件位于我添加到窗体的用户控件中。当我在我的家用机器上运行程序时,它很好地运行,速度快,重绘也不是问题。但是当我将此程序放在我的桌面电脑上(四核Intel 2.4Ghz、4GB RAM和NVidia Gefore 8800GT),它在重绘时变得非常缓慢。这可能是驱动程序问题吗?我已经为所有用户控件和窗体启用了双缓冲,但没有任何帮助。我已经阅读了这个帖子,但我的情况并不相同:Super slow C# custom control

我必须说,用户控件在设计模式下的重绘速度比运行时要快。此外,在我的搭载 ATI 显卡的 AMD 机器上,窗体几乎瞬间显示,而在 NVidia 机器上,窗体需要大约 10 秒钟才能绘制完成。 - MarkP
1
你确定所有的驱动程序都是最新的吗? - asawyer
实际上,如果谈论winforms,显卡应该与之无关,因为GDI+没有硬件加速,不是吗? - Alex Paven
我认为GDI+已经改用DirectX了。不过,这可能只是在Vista和Win7系统上。然而,在一个带有NVidia显卡的Win2K3系统上才会出现这个问题。 - MarkP
你是否在所有地方使用相同版本的 .net framework? - user180326
显示剩余3条评论
2个回答

0

问题是“.SuspendLayout();”并不能真正停止绘图。我记不清语句了,但我相信你可以在谷歌上找到它。 尝试使用.AddRange可能会有帮助。


0

需要注意的是,绘制控件就像在二维表面上绘画一样,需要重叠。如果控件不理解诸如矩形剪切之类的东西,它可能会绘制一个不可见的控件部分(特别是隐藏在另一个容器中的控件,例如TabPage),浪费宝贵的CPU周期。此外,将BackColor设置为透明的控件将尝试通过采用其父控件的BackColor来模拟透明度。由于所有这些都发生在未经硬件加速的GDI+上,因此具有此行为的许多控件将加剧减速。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接