【问题标题】:How to speed up WPF programs?如何加速 WPF 程序?
【发布时间】:2008-10-21 14:24:59
【问题描述】:

我喜欢使用 Windows Presentation Framework 进行编程。我主要使用 WPF 和 XAML 编写类似浏览器的应用程序。

但真正让我烦恼的是 WPF 的缓慢性。只有几个控件的简单页面加载速度足够快,但一旦页面稍微复杂一点,比如包含大量数据输入字段、一两个选项卡控件等等,就会变得很痛苦。

加载此类页面可能需要一秒钟以上的时间。确实是几秒钟,尤其是在速度不那么快的计算机(阅读:客户计算机)上,这可能需要很长时间。

与更改页面上的值相同。 WPF UI 的一切都有些迟钝。

这太卑鄙了!他们给了我这个漂亮的框架,但让它变得非常缓慢,所以我不得不一直向我们的客户道歉!

我的问题:

  1. 如何加快 WPF?
  2. 您如何分析瓶颈?
  3. 如何处理缓慢的问题?

由于这似乎是 WPF 的一个普遍问题,我正在寻找对许多情况和问题有用的一般建议。

其他一些相关问题:

【问题讨论】:

  • Evernote 团队写道,他们最终只需要abandon WPF 即可获得可接受的性能。

标签: wpf performance


【解决方案1】:
  1. 如何加快 WPF?

    通常在使用以下分析工具之一后,很明显是什么导致了我的瓶颈。

    • 如果内存是问题,那么我会虚拟化我的数据。
    • 如果渲染时间是问题,那么我会虚拟化控件或尽可能简化控件模板。
    • 如果处理时间是问题,我会尝试改进我的算法或将工作移至后台线程,并在工作进行时在我的 UI 中显示一个 throbber。

  2. 您如何分析瓶颈?

  3. 如何处理缓慢?

    分析和咨询。

【讨论】:

  • “虚拟化”数据/控件是什么意思?
  • (+1) 以获得出色的答案。但是,我认为您应该扩展 3,因为您的其余答案非常专业。您已经部分回答了“在 UI 中显示 throbber”,还有其他选项,例如预加载、顺序渲染、拆分页面等。问题 3 是应用程序意义上(即 UX)中更广泛最实际的问题,所以它值得考虑。
  • 通过“虚拟化” OP 意味着:对于具有许多项的控件(例如列表控件),仅将可见项保存在内存中,而不是完整的项集。当您拥有大量项目时,这可以节省内存,因为您只需存储用户可见的尽可能多的项目,而不是整个集合。
【解决方案2】:

安装 SP1...为 WPF 带来大量非常酷的性能提升!!!

阅读更多here

这是 SP1 中进行的 2 项增强的示例:Deffered scrolling & UI Element recyceling!!!

【讨论】:

【解决方案3】:

我无法添加 cmets,这就是我发布新答案的原因:我从 pdc09 中找到了这个视频,它提供了一些关于如何配置 wpf 应用程序的想法,因为它对我有很大帮助,我想分享链接:

Advanced WPF Application Performance Tuning and Analysis

【讨论】:

    【解决方案4】:

    WPF 适用于配备现代显卡的计算机。您的客户是否拥有能够运行 Aero 的现代显卡?如果您的客户使用较旧的显卡,WPF 将回退到软件渲染,与硬件加速图形相比,它的运行速度极慢。

    您可能还想分析您的应用程序以确保它实际上是 WPF 是慢速部分。可能还有其他东西实际上是瓶颈。

    【讨论】:

      【解决方案5】:

      有时避免使用动画也很有帮助。如果您必须使用动画,请降低帧率,这将提高“感觉”性能

      【讨论】:

        【解决方案6】:

        移除 alpha 透明度/位图效果。

        【讨论】:

          【解决方案7】:

          你能提供更多细节吗?

          我只注意到当我使用诸如列表视图或具有一定复杂性的网格之类的东西时性能很慢。解决方案是简化它。

          除此之外,我只注意到第一次加载应用程序时性能很慢。

          HTH

          【讨论】:

            【解决方案8】:

            我发现绕过 XAML 并用 C# 编写整个 UI 很有帮助。这让我可以精确控制何时创建和加载控件。它还帮助我了解 XAML “在幕后”在做什么。

            【讨论】:

            • 这只让您在需要时对控件进行精细控制。它不一定会提高性能。
            猜你喜欢
            • 2013-03-05
            • 2015-11-07
            • 1970-01-01
            • 2010-10-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-08-23
            相关资源
            最近更新 更多