如何加速 WPF 程序?
Posted
技术标签:
【中文标题】如何加速 WPF 程序?【英文标题】:How to speed up WPF programs? 【发布时间】:2008-10-21 14:24:59 【问题描述】:我喜欢使用 Windows Presentation Framework 进行编程。我主要使用 WPF 和 XAML 编写类似浏览器的应用程序。
但真正让我烦恼的是 WPF 的缓慢性。只有几个控件的简单页面加载速度足够快,但一旦页面稍微复杂一点,比如包含大量数据输入字段、一两个选项卡控件等等,就会变得很痛苦。
加载此类页面可能需要一秒钟以上的时间。确实是几秒钟,尤其是在速度不那么快的计算机(阅读:客户计算机)上,这可能需要很长时间。
与更改页面上的值相同。 WPF UI 的一切都有些迟钝。
这太卑鄙了!他们给了我这个漂亮的框架,但让它变得非常缓慢,所以我不得不一直向我们的客户道歉!
我的问题:
-
如何加快 WPF?
您如何分析瓶颈?
如何处理缓慢的问题?
由于这似乎是 WPF 的一个普遍问题,我正在寻找对许多情况和问题有用的一般建议。
其他一些相关问题:
What tools do you use for WPF development Tools to develop WPF or Silverlight applications【问题讨论】:
Evernote 团队写道,他们最终只需要abandon WPF 即可获得可接受的性能。 【参考方案1】:如何加快 WPF? 通常在使用以下分析工具之一后,很明显是什么导致了我的瓶颈。
如果内存是问题,那么我会虚拟化我的数据。 如果渲染时间是问题,那么我会虚拟化控件或尽可能简化控件模板。 如果处理时间是问题,我会尝试改进我的算法或将工作移至后台线程,并在工作进行时在我的 UI 中显示一个 throbber。您如何分析瓶颈?
.NET Memory Pofiler dotTrace Performance Profiling Tools for WPF Snoop Crack.NET如何处理缓慢? 分析和咨询。
【讨论】:
“虚拟化”数据/控件是什么意思? (+1) 以获得出色的答案。但是,我认为您应该扩展 3,因为您的其余答案非常专业。您已经部分回答了“在 UI 中显示 throbber”,还有其他选项,例如预加载、顺序渲染、拆分页面等。问题 3 是应用程序意义上(即 UX)中更广泛最实际的问题,所以它值得考虑。 通过“虚拟化” OP 意味着:对于具有许多项的控件(例如列表控件),仅将可见项保存在内存中,而不是完整的项集。当您拥有大量项目时,这可以节省内存,因为您只需存储用户可见的尽可能多的项目,而不是整个集合。【参考方案2】:安装 SP1...为 WPF 带来大量非常酷的性能提升!!!
阅读更多here
这是 SP1 中进行的 2 项增强的示例:Deffered scrolling & UI Element recyceling!!!
【讨论】:
您可能首先“注意到”的是滚动和绑定改进...在此处阅读更多信息:dotnet.org.za/rudi/archive/2008/05/22/…【参考方案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 “在幕后”在做什么。
【讨论】:
这只让您在需要时对控件进行精细控制。它不一定会提高性能。以上是关于如何加速 WPF 程序?的主要内容,如果未能解决你的问题,请参考以下文章