优化性能:善用硬件

WPF 的内部体系结构有两个呈现管道,即硬件和软件。 本主题提供有关这些呈现管道的信息,可帮助你对应用程序的性能优化做出决策。

硬件渲染流水线

确定 WPF 性能的最重要因素之一是它受到渲染限制—需要渲染的像素越多,性能成本就越高。 但是,可以卸载到图形处理单元(GPU)的呈现越多,可获得的性能优势就越大。 WPF 应用程序硬件呈现管道充分利用了支持至少 Microsoft DirectX 版本 7.0 的硬件上的 Microsoft DirectX 功能。 支持 Microsoft DirectX 版本 7.0 和 PixelShader 2.0+ 功能的硬件可以进一步优化。

软件渲染管道

WPF 软件呈现管道完全受 CPU 限制。 WPF 利用 CPU 中的 SSE 和 SSE2 指令集来实现优化、功能齐全的软件光栅器。 每当无法通过硬件渲染管道实现应用程序功能时,切换到软件渲染是无缝的。

在软件模式下进行渲染时,您将遇到的最大性能问题与填充率相关,填充率的定义是您正在渲染的像素数。 如果担心软件呈现模式的性能,请尝试最大程度地减少重绘像素的次数。 例如,如果您有一个蓝色背景的应用程序,然后在上面渲染一个半透明的图像,您将会在应用程序中把所有像素渲染两次。 因此,使用图像来呈现应用程序所需的时间是只有蓝色背景的两倍。

图形渲染层级

可能很难预测应用程序将运行的硬件配置。 但是,你可能想要考虑一种设计,它允许应用程序在不同硬件上运行时无缝切换功能,以便它可以充分利用每个不同的硬件配置。

为此,WPF 提供用于确定系统在运行时的图形功能的功能。 图形功能通过将视频卡分类为三个呈现功能层之一来确定。 WPF 公开允许应用程序查询呈现功能层的 API。 然后,应用程序可以在运行时采用不同的代码路径,具体取决于硬件支持的呈现层。

图形硬件的功能对呈现层级别影响最大的是:

  • 视频 RAM 图形硬件上的视频内存量决定了可用于组合图形的缓冲区的大小和数量。

  • 像素着色器 像素着色器是一个图形处理函数,可基于每个像素计算效果。 根据显示图形的分辨率,可能需要为每个显示帧处理几百万像素。

  • 顶点着色器 顶点着色器是图形处理函数,用于对对象的顶点数据执行数学运算。

  • 多文本支持 多文本支持是指在三维图形对象混合作期间应用两个或多个不同纹理的能力。 多文本支持的程度取决于图形硬件上的多文本单位数。

像素着色器、顶点着色器和多文本功能用于定义特定的 DirectX 版本级别,而后者又用于定义 WPF 中的不同呈现层。

图形硬件的功能决定了 WPF 应用程序的呈现功能。 WPF 系统定义三个呈现层:

  • 呈现层 0 无图形硬件加速。 DirectX 版本级别小于版本 7.0。

  • 渲染层 1 部分图形硬件加速。 DirectX 版本级别大于或等于版本 7.0, 小于 版本 9.0。

  • 呈现层 2 大多数图形特性都使用图形硬件加速。 DirectX 版本级别大于或等于版本 9.0。

有关 WPF 呈现层的详细信息,请参阅 图形呈现层

另请参阅