繁体   English   中英

WPF性能。 错误的脏矩形计算

[英]WPF Performance. Wrong dirty rect calculation

我目前正在处理与WPF富客户端LOB应用程序中的性能问题有关的客户分配。

问题是该应用程序运行非常缓慢/缓慢。 特别是数据表的处理(滚动,排序,选择)非常慢,并且使应用程序无法使用。

当一个包含几个文本框,组合框和标签的选项卡被打开并保持空闲状态(等待用户输入)时,我分析了系统状态。

这些是我的发现:

  • 所有渲染均在GPU上计算
  • 没有动画,位图效果,透明度等性能高的功能。
  • 当选项卡处于空闲状态时(仅光标在焦点突出的文本框中闪烁,选项卡的其余部分是静态的,甚至不包含任何数据),GPU的运行速度高达90%
  • 选项卡失去焦点时,GPU降为0
  • GPU百分比直接与窗口大小有关。 小窗口可将其降低到百分之几,全屏显示可将其提高近100%
  • WPF Perforator告诉我WPF会计算整个选项卡的脏区,而不是仅闪烁的光标
  • WPF Perforator在闲置选项卡上报告的脏矩形更新速率大于20 / sec,它们与GPU使用率直接相关

我的结论:在开发过程中,引入了许多自定义代码(布局,事件处理等),以使WPF适应整个系统的后端驱动架构。 我的猜测是,由于某些自定义代码,WPF的“脏乱”矩形机制已被破坏。 这会导致过多的绘图活动,从而导致很高的GPU使用率。 这些不必要的活动导致上述问题。

现在,我正在寻找应该开始调查的任何建议。 换句话说:开发人员为了破坏WPF脏乱更新算法而可能犯的典型错误是什么? 高度赞赏任何输入。

致以真诚的感谢和诚挚的问候!

曼努埃尔

感谢您的输入。 让我澄清一下后端驱动:UI是高度动态的。 来自后端的消息定义了ui的结构和要显示的数据。 因此,对于选项卡的结构,我们没有任何xaml,只有c#。

同时,我可以解决问题。 我使用了Snoop,并在监视GPU使用情况时逐个折叠每个元素。 我发现其中一个边界上有一个非常小的像素阴影效果(DropShadowEffect)。 删除效果后,GPU从80%下降到1%。 WPF在UI的小部分上绘制了正确的脏矩形。 问题已解决,案件已结案。

对我来说似乎有趣的事情:1.这种小影响对GPU使用产生了巨大影响。 2.破坏了脏矩形计算。 3.因为它不是BitmapEffect而是PixelshaderEffect,所以我无法通过在Perforator中禁用BitmapEffects来揭示它。

谢谢! MM

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM