我目前从事与WPF富客户端LOB应用程序中的性能问题相关的客户分配。
问题是应用程序运行速度很慢/缓慢。特别是数据表处理(滚动,排序,选择)非常慢,使应用程序无法使用。
我分析了包含少量文本框,组合框和标签的单个选项卡并保持空闲状态(等待用户输入)时的系统状态。
这些是我的发现:
我的结论: 在开发过程中,引入了许多自定义代码(布局,事件处理等),以便将WPF整合到系统的后端驱动架构中。我的猜测是,由于一些自定义代码,WPF的脏矩形机制已被破坏。这导致过多的绘图活动,因此GPU使用率非常高。这些不必要的活动导致了上述问题。
现在我正在寻找任何我应该开始调查的建议。或者换句话说:开发人员可以为破坏WPF脏矩更新算法而犯的典型错误是什么。任何意见都非常感谢。
非常感谢和最诚挚的问候!
曼努埃尔
答案 0 :(得分:0)
感谢您的投入。让我澄清一下后端驱动:UI是高度动态的。来自后端的消息定义了ui的结构和要显示的数据。因此,我们没有任何xaml用于选项卡的结构,只有c#。
与此同时,我可以解决问题。我使用Snoop并逐个折叠每个元素,同时监控GPU使用情况。我发现其中一个边框上有一个非常小的像素着色器效果(DropShadowEffect)。一旦我删除了效果,GPU就从80%下降到1%。 WPF在UI的一小部分上绘制了正确的脏矩形。问题解决了,案件结案。
对我来说似乎很有趣的事情: 1.这种小影响对GPU使用的巨大影响。 它打破了脏计算。 3.由于它不是BitmapEffect而是PixelshaderEffect,我无法通过在Perforator中禁用BitmapEffects来揭示它。
谢谢! MM