gpt4 book ai didi

wpf - 提高 WPF UI 渲染速度的方法

转载 作者:行者123 更新时间:2023-12-03 07:04:18 24 4
gpt4 key购买 nike

如果 WPF 应用程序的屏幕包含大量原始控件,则其渲染会变得缓慢。在这种情况下,除了添加更少的控件和使用更强大的显卡之外,还有哪些建议的方法可以提高 WPF 应用程序的响应能力?

有没有办法以某种方式使用离屏缓冲或类似的东西?

最佳答案

我们的团队面临渲染性能问题。在我们的例子中,我们有大约 400 个运输单元,我们应该绘制每个单元的图表,其中包含大量细节(文本标签、特殊标记、不同的几何形状等)。

在我们的第一个实现中,我们将每个图表拆分为基元,并通过绑定(bind)组成整个单元的图表。这是一次非常悲伤的经历。 UI react 极其缓慢。

因此,我们决定为每个单元创建一个 UI 元素,并使用 DrawingContext 渲染图表。虽然这在性能方面要好得多,但我们花了大约一个月的时间来改进渲染。

一些建议:

  1. 缓存所有内容。画笔、颜色、几何图形、格式化文本、字形。 (例如我们有两个类:RenderToolsTextCache。每个单元的渲染过程都地址到这两个类的共享实例。因此,如果两个图表具有相同的文本,则其准备仅执行一次。)
  2. 卡住Freezable,如果您打算长期使用它。尤其是几何图形。复杂的未卡住几何图形执行 HitTest 的速度非常慢。
  3. 选择渲染每个图元的最快方式。例如,大约有 6 种文本渲染方式,但最快的是 DrawingContext.DrawGlyphs
  4. 使用探查器发现热点。例如,在我们的项目中,我们缓存了几何图形并根据需要渲染它们。看起来,没有任何改进是可能的。但有一天我们想,如果我们一次性渲染几何图形并缓存准备好的视觉效果会怎么样?在我们的例子中,这种方法是可以接受的。我们单位的图表只有几个状态。当图表数据发生变化时,我们为每个状态重建DrawingVisual并将它们放入缓存中。

当然,这种方式需要一些投入,是一项枯燥无味的工作,但结果却是很棒的。

顺便说一句:当我们打开 WPF 缓存选项(您可以在答案中找到链接)时,我们的应用程序挂起了。

关于wpf - 提高 WPF UI 渲染速度的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5401549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com