WPF是我申请缓慢的原因吗?

时间:2009-12-12 00:52:33

标签: c# wpf vector-graphics performance

我正在使用WPF开发应用程序。该应用程序全屏运行,无论显示器分辨率如何,我都需要它才能很好地调整大小。图形设计师为UI按钮,背景等设计了精美的图像。使用Illustrator插件,所有图像都已转换为xaml文件。我已将所有这些图像添加到应用程序中,它们看起来很棒。我也使用了很多Grid布局,以便屏幕可以在保持布局的同时调整大小。所有这些都根据需要显示,当以不同的分辨率运行时,没有任何东西看起来拉伸。但是,屏幕转换和UI交互很慢。

我很纳闷,这是因为图形的大量使用?我使用了太多Grid布局吗?但是,我需要Grid s才能使分辨率独立。

应用程序在我的开发机器上运行良好,但在具有较低性能的机器上运行速度非常慢。是的,这是可以预料的,但不是我所看到的程度。我的雇主坚持认为应用程序在这些性能较低的机器上运行顺畅。

我已经对应用程序进行了一些分析,似乎需要花费最多时间的是显示内容(尽管我不确定我是否完全理解使用分析器的效率如何)。

如果WPF导致速度减慢,我该怎么做才能改善这个?

6 个答案:

答案 0 :(得分:11)

您可以使用Performance Profiling Tools for WPF深入了解哪些WPF活动正在耗尽时间。假设一个沉重的图形负载导致减速,这应该给你一些帮助,可能需要简化(例如布局)或删除(例如位图效果(这些是经典的性能杀手,但我不想偏见)你的个人资料!))。

答案 1 :(得分:6)

  

如果是导致速度减慢的WPF

可能不是;)

更有可能是你的代码会导致速度减慢。 WPF功能强大,但您必须了解核心概念才能使其正常工作......您应该从PDC会话中查看this video,它提供了许多有关如何更快地使WPF应用程序的建议< / p>

答案 2 :(得分:4)

  1. 将按钮的XAML矢量图像转换为透明PNG图像。路径和形状非常重,可以渲染,计算和调整大小。大多数情况下,在部署之后,图像永远不会更好地将它们设置为光栅然后矢量,除非您想要执行更改形状,大小或其他属性的平滑动画。

  2. 与Canvas,DockPanel相比,网格是非常昂贵的布局管理器。你当然可以考虑用DockPanel替换某些网格,但是这不是一个简单的解决方案,它需要大量的头脑风暴。

  3. 避免使用单个孩子的面板。尝试减少Visual Hierarchy。

  4. 对按钮和此类小元素使用更多固定大小,如果指定固定大小的子项,则Panels可以轻松进行布局处理。

答案 3 :(得分:1)

WPF性能在很大程度上取决于机器中显卡的质量,更多的是处理器/内存。视频卡错误= WPF性能不佳。

答案 4 :(得分:1)

嗯,这是远景:当我安装VSTS 2010(它使用WPF)时,在具有足够CPU /内存的Windows 2008服务器上非常慢,在一个更适度的笔记本电脑中,非常快速。我们成功地禁用了硬件加速,它在这台机器上变得非常快。

也许你确实想尝试这种配置,因为它非常简单:Visual Studio 2010 Beta 2 editor performance fix running on a virtual machine

答案 5 :(得分:0)

一般来说,WPF在绘制性能方面比Windows Forms和本机GDI或DirectX要差得多。

是的,从某种意义上来说,WPF是强大的,你可能会做一些GDI不支持的整洁的东西,但它更缓慢。

如果你有很多工作要做,并且你想在慢速硬件上支持它,那么WPF不是一个好的选择。