代码之家  ›  专栏  ›  技术社区  ›  Mike Dinescu

如何处理WPF渲染UI的撕裂?

  •  3
  • Mike Dinescu  · 技术社区  · 14 年前

    令我失望的是,我发现我正在开发的一个应用程序在某些计算机上表现得相当差。用户界面静态图形和文本在没有做任何动画的情况下会出现严重的撕裂。这使得文本不可读,当然,图形看起来也很差。

    我在不同的电脑上注意到了这个问题,但真正让我想到的是一台更新的东芝笔记本电脑,它带有一个Radeon移动视频卡:当这台笔记本电脑用电池供电时,不会有撕裂——但当它插上电源运行时,一切都是一团糟。所以这看起来像是电源线噪声的问题,它明显影响了显卡——我猜是硬件加速的图形。但是,非WPF图形呈现良好,因此如何告诉用户: “这不是我的应用程序,而是你的电源!” ?!

    你有没有碰过这个?还有什么办法可以解决吗?

    应用程序是.NET 4.0,笔记本电脑运行的是Windows7。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Community T.Woody    7 年前

    我在我的宏基笔记本电脑上也遇到过同样的事情。这实际上是屏幕驱动程序的驱动程序问题,供应商更新完全解决了这个问题。

    我建议就这个问题直接联系东芝。将它们指向一些公开的、易于查找的WPF应用程序,这些应用程序演示了这个问题。

    同时,我所知道的唯一“解决方案”是让WPF完全禁用硬件加速。 This post 描述如何强制所有WPF应用程序进行软件渲染,这将纠正撕裂(以显著降低渲染性能为代价)。

        2
  •  2
  •   John Bowen    14 年前

    这些问题通常是由ATI显卡的驱动程序引起的。Nvidia卡(虽然它们有自己的问题)通常不会显示这些问题。

    修复它的最简单方法是禁用硬件渲染。这可能导致性能问题,但通常不会产生明显的差异,有时甚至可以提高性能。你需要测试它,让你自己的应用程序看到。从窗口代码设置:

    (PresentationSource.FromVisual(this) as HwndSource).CompositionTarget.RenderMode = RenderMode.SoftwareOnly;
    
        3
  •  1
  •   Dan Puzey    14 年前

    正如里德所说,这很可能是驾驶员的问题。但是,我以前在一些具有最新驱动程序的卡上看到过这种情况,因此这并不总是一个可解决的问题,这取决于您的硬件。如果这个 一个图形问题由一个特定的图形卡引起,您可以尝试这个解决方法…

    在regedit中,可以创建或将以下dword值编辑为“1”,以强制所有WPF应用程序的软件呈现:

    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Avalon.Graphics\DisableHWAcceleration
    

    我在过去发现,在低端机器(上网本和集成图形机器)上,这通常可以无声地提高WPF应用程序的性能,因为它减少了GPU和CPU之间的内存争用。