2009-12-12 65 views
9

我正在开发一个使用WPF的应用程序。该应用程序运行全屏,无论显示器分辨率如何,我都需要它来调整大小。平面设计师为UI按钮,背景等设计了精美的图像。使用Illustrator插件,所有图像都被转换为xaml文件。我已将所有这些图像添加到应用程序中,并且它们看起来很棒。我也使用了很多Grid布局,以便屏幕可以调整大小,同时仍然保持布局。所有这些都是按照需要显示的,当以不同的分辨率运行时,没有什么看起来被拉伸。但是,屏幕转换和UI交互速度很慢。WPF是我的应用程序很慢的原因吗?

我想知道,这是由于大量使用图形?我是否使用太多Grid布局?但是,我需要Grid,这样我才能拥有解决方案的独立性。

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

我已经做了一些应用程序的分析,它似乎最需要的是显示的东西(尽管我不确定我完全理解如何有效地使用探查器)。

如果是导致放缓的WPF,我该怎么做才能改善这种情况?

+1

不知道写出一个真正的答案,但我会仔细看看illsutrator-to-xaml插件的输出。至少看看你的应用使用占位符图形元素(例如,空网格)的行为。 – Egor 2009-12-12 01:23:23

回答

10

您可以使用Performance Profiling Tools for WPF深入了解哪些WPF活动正在使用时间。假设一个沉重的图形负载导致放缓,这应该给你一些帮助,可能需要简化(如布局)或删除(例如位图效果(这是一个典型的全能杀手,虽然我不想偏见你的分析!))。

6

如果是导致经济放缓

可能不是WPF)

这是更可能的是它是代码导致经济放缓。 WPF功能强大,但您必须了解核心概念才能使其运行良好...您应该从PDC会话中看到this video,它提供了许多有关如何更快地创建WPF应用程序的建议

+0

视频链接不再有效。 – 2015-05-10 01:25:52

+1

这似乎是该视频的当前位置:https://channel9.msdn.com/Events/PDC/PDC09/CL10 – TripleAntigen 2016-04-25 02:03:09

2

WPF性能在很大程度上取决于机器中视频卡的质量,而非处理器/内存。坏视频卡=糟糕的WPF性能。

1

好了,这是一个远投:当我安装VSTS 2010(它使用WPF)这是有足够的CPU /内存在Windows 2008服务器上很慢,更非常快速谦虚的笔记本。我们设法禁用了硬件加速,并且它变得非常快速地进入该机器。

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

+0

有趣的,从来没有见过DisableHWAcceleration用于加速WPF之前! – itowlson 2009-12-12 01:10:51

+0

这让我觉得太..但在VS2010工作,我发誓=) http://stackoverflow.com/questions/1743525/can-i-and-how-do-i-target-net-4-with- vs-2008/1743556#1743556 – 2009-12-12 01:21:02

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

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

  3. 避免面板与单个孩子。尽量减少可视化层次结构。

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

+3

PNG图像不会很好地调整大小,这就是为什么我已经与向量。 – 2009-12-14 17:51:36

+2

另外,除非我依赖网格,否则我该如何开发一款应用程序来调整布局以适应屏幕分辨率? – 2009-12-14 20:24:11

+0

并非所有图像都需要PNG格式,例如按钮的所有图标,或者类似于IE的后退/前进按钮上的图像,即使调整大小,它们也总是保持不变,这些按钮可以转换为PNG格式。您可以使用DockPanel而不是网格,或者使用相对的列/行大小而不是“自动”。如果你可以稍微显示你的应用程序的屏幕,我可以提出一些更好的步骤。 – 2009-12-15 08:15:31

0

一般来说,WPF的绘制性能比Windows窗体,本地GDI或DirectX的性能差得多。

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

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

相关问题