为什么每次调整WPF窗口时都会出现黑色滞后?

时间:2014-04-11 13:53:02

标签: wpf

关于SE的其他问题解决了如何加速嵌套UI控件调整大小,但是 - 如果没有任何控件会怎样?

当您拖动WPF窗口的边缘时,即使是没有内容的主窗口,在拖动过程中黑条也会短暂闪烁。这会产生一种令人不快的感觉 - 我不想对顾客造成这种感觉:

WPF window being resized

它也会变得越来越慢,并且还有一个完整的UI。当使用顶部或左边缘调整大小时,这甚至不会看到它看起来多么丑陋。 Windows窗体 - 即使拥有我构建的最重的UI - 从来没有看起来那么糟糕。

如何使WPF窗口调整大小的性能与win表单相当?

(我在AT Radeon HD 7470上安装了Windows 7 x64和三重监听系统。)

2 个答案:

答案 0 :(得分:3)

您可以更新您的图形卡并再次尝试,但不会改变任何内容。原因很简单。我们都会看到这有时基于我们的计算机有多快/慢。有时它运行顺畅,因为我们没有很多可视化的东西。原因是在重绘过程​​中当时图形卡中没有找到合适的背景颜色。你的驱动程序很好,这不仅仅是因为你使用Wpf。其他技术使用重绘后的相同机制。

WPF要做的第一件事是清除要重绘的脏区域。脏区域的目的是减少发送到GPU管道的输出合并阶段的像素量。这是我们看到黑色的地方。窗口本身在该点没有背景颜色或其背景颜色设置为透明,因此GPU绘制黑色背景。事情在wpf中运行异步,这很好。

要解决此问题,您可以设置修复颜色,例如" White"到窗口。然后WPF系统将清除脏区域,但自动填充白色而不是黑色。这通常会有所帮助。

匹配窗口颜色或最顶层的颜色。不要让GPU使用黑色,你应该做得很好。顺便说一句Wpf比WinForm快,所以不用担心。

答案 1 :(得分:0)

外观确实很糟糕,尤其是在使用顶部或左侧边框时。

您的屏幕截图显示的确切问题取决于您的应用渲染所需的时间以及一些与背景相关的设置,您可以调整这些设置以获得更好的调整大小。再加上部分难看的尺寸调整是特定于Aero的。

虽然我无法解决WPF重绘的特定疯狂缓慢问题,但我至少可以对您为什么会看到黑色,它来自何处以及是否可以更改为较不令人讨厌的填充颜色提供一些见解。

事实证明,来自不同Windows版本的黑色和不良大小调整行为有多种不同的来源结合在一起。请参阅以下问答,其中解释了正在发生的事情并提供了有关操作的建议(同样,并非特定于使WPF更快,而只是根据给定的速度查看您可以做什么):

How to smooth ugly jitter/flicker/jumping when resizing windows, especially dragging left/top border (Win 7-10; bg, bitblt and DWM)?