[英]WPF Performance. Wrong dirty rect calculation
我目前正在处理与WPF富客户端LOB应用程序中的性能问题有关的客户分配。
问题是该应用程序运行非常缓慢/缓慢。 特别是数据表的处理(滚动,排序,选择)非常慢,并且使应用程序无法使用。
当一个包含几个文本框,组合框和标签的选项卡被打开并保持空闲状态(等待用户输入)时,我分析了系统状态。
这些是我的发现:
我的结论:在开发过程中,引入了许多自定义代码(布局,事件处理等),以使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.