12

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

我想知道,这是由于大量使用图形造成的吗?我是否使用了太多Grid布局?但是,我需要Grids 以便我可以拥有分辨率独立性。

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

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

如果是 WPF 导致速度变慢,我该怎么做才能改善呢?

4

6 回答 6

11

您可以使用Performance Profiling Tools for WPF深入了解哪些 WPF 活动正在使用正常运行时间。假设图形负载过重导致速度变慢,这应该可以帮助您了解哪些可能需要简化(例如布局)或删除(例如位图效果(这些是经典的性能杀手,尽管我不想偏见你的分析!))。

于 2009-12-12T00:58:46.987 回答
5

如果是 WPF 导致减速

可能不是 ;)

更有可能是您的代码导致速度变慢。WPF 功能强大,但您必须了解核心概念才能使其正常工作...您应该观看 PDC 会话中的此视频,它提供了很多关于如何使您的 WPF 应用程序更快的建议

于 2009-12-12T01:02:12.273 回答
4
  1. 将按钮的 XAML 矢量图像转换为透明的 PNG 图像。路径和形状对于渲染、计算和调整大小非常繁重。大多数情况下,在部署之后,图像永远不会改变,最好将它们作为光栅而不是矢量,除非您想要执行改变形状、大小或其他属性的平滑动画。

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

  3. 避免面板与独生子女。尝试减少视觉层次结构。

  4. 对按钮等小元素多使用固定大小,如果指定子项的固定大小,Panels 做布局处理就变得容易了。

于 2009-12-13T07:44:22.863 回答
3

一般而言,WPF 在绘图性能方面的表现比 Windows 窗体和本机 GDI 或 DirectX 差得多。

是的,从某种意义上说,WPF 很强大,您可以制作一些 GDI 不支持的简洁的东西,但它更迟钝。

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

于 2015-11-14T08:11:05.997 回答
1

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

于 2009-12-12T01:05:02.907 回答
1

好吧,这是一个长镜头:当我安装 VSTS 2010(并且它使用 WPF)时,它在具有足够 CPU/内存的 Windows 2008 服务器上非常慢,而在更普通的笔记本电脑上却非常快。我们设法禁用了硬件加速,它在该机器中变得非常快。

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

于 2009-12-12T01:07:26.843 回答