我正在使用WPF开发应用程序。该应用程序全屏运行,无论显示器分辨率如何,我都需要它才能很好地调整大小。图形设计师为UI按钮,背景等设计了精美的图像。使用Illustrator插件,所有图像都已转换为xaml文件。我已将所有这些图像添加到应用程序中,它们看起来很棒。我也使用了很多Grid
布局,以便屏幕可以在保持布局的同时调整大小。所有这些都根据需要显示,当以不同的分辨率运行时,没有任何东西看起来拉伸。但是,屏幕转换和UI交互很慢。
我很纳闷,这是因为图形的大量使用?我使用了太多Grid
布局吗?但是,我需要Grid
s才能使分辨率独立。
应用程序在我的开发机器上运行良好,但在具有较低性能的机器上运行速度非常慢。是的,这是可以预料的,但不是我所看到的程度。我的雇主坚持认为应用程序在这些性能较低的机器上运行顺畅。
我已经对应用程序进行了一些分析,似乎需要花费最多时间的是显示内容(尽管我不确定我是否完全理解使用分析器的效率如何)。
如果WPF导致速度减慢,我该怎么做才能改善这个?
答案 0 :(得分:11)
您可以使用Performance Profiling Tools for WPF深入了解哪些WPF活动正在耗尽时间。假设一个沉重的图形负载导致减速,这应该给你一些帮助,可能需要简化(例如布局)或删除(例如位图效果(这些是经典的性能杀手,但我不想偏见)你的个人资料!))。
答案 1 :(得分:6)
如果是导致速度减慢的WPF
可能不是;)
更有可能是你的代码会导致速度减慢。 WPF功能强大,但您必须了解核心概念才能使其正常工作......您应该从PDC会话中查看this video,它提供了许多有关如何更快地使WPF应用程序的建议< / p>
答案 2 :(得分:4)
将按钮的XAML矢量图像转换为透明PNG图像。路径和形状非常重,可以渲染,计算和调整大小。大多数情况下,在部署之后,图像永远不会更好地将它们设置为光栅然后矢量,除非您想要执行更改形状,大小或其他属性的平滑动画。
与Canvas,DockPanel相比,网格是非常昂贵的布局管理器。你当然可以考虑用DockPanel替换某些网格,但是这不是一个简单的解决方案,它需要大量的头脑风暴。
避免使用单个孩子的面板。尝试减少Visual Hierarchy。
对按钮和此类小元素使用更多固定大小,如果指定固定大小的子项,则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不是一个好的选择。