【问题标题】:C# custom control redraw slowC#自定义控件重绘慢
【发布时间】:2010-10-20 03:34:38
【问题描述】:

我有一个 C# Forms 程序,总共有大约 200 个控件。有些在我添加到表单的用户控件中。当我在我的家用机器上运行我的程序时,一个双核 AMD X64,2.0Ghz 和一个 ATI X1600 卡,程序运行良好。它很快,重绘不是问题。

当我把这个程序放到我的桌面上时,一个四核 Intel 2.4Ghz、4GB RAM 和一个 NVidia Gefore 8800GT,它在重绘时速度变慢了。这可能是驱动程序问题吗?

我为所有用户控件和表单启用了双缓冲。那里没有帮助。

我看过这个帖子,但我的情况不一样: Super slow C# custom control

【问题讨论】:

  • 我不得不说,用户控件在设计模式下的重绘速度比运行时快。此外,在我的带有 ATI 卡的 AMD 机器上,表格几乎立即显示,而在 NVidia 机器上,表格需要大约 10 秒才能绘制。
  • 您是否确保所有驱动程序都是最新的?
  • 有了这些数字,它一定是驱动程序问题。你可以用一个小应用程序来确认绘制 100000 条线之类的东西。
  • 我经常使用组合框。屏幕上可能同时出现 30 到 40 个,并且由此形成了相当深的子级层次结构。
  • 其实说winforms的话,显卡应该和显卡没什么关系,因为GDI+不是硬件加速的吧?

标签: c# forms


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    请务必注意,绘制控件就像在 2D 表面上绘制一样,可以根据需要进行重叠。如果控件不理解矩形裁剪之类的东西,它可能正在绘制控件的不可见部分(尤其是隐藏在另一个容器中的控件,如 TabPage),从而浪费宝贵的 CPU 周期.此外,其 BackColor 为透明的控件将尝试通过采用其父控件的 BackColor 来模拟透明度。由于所有这些都发生在没有硬件加速的 GDI+ 上,因此有许多表现出这种行为的控件会加剧速度下降。

    【讨论】:

      猜你喜欢
      • 2010-10-09
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      相关资源
      最近更新 更多