【WPF.NET开发】优化性能:图形呈现层

本文内容

  1. 图形硬件
  2. 呈现层定义
  3. 其他资源

呈现层为运行 WPF 应用程序的设备定义图形硬件功能和性能级别。

1、图形硬件

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

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

  • 像素着色器 - 像素着色器是基于像素计算效果的图形处理功能。 每个显示帧可能有数百万像素需要处理,具体取决于显示图形的分辨率。

  • 顶点着色器 - 顶点着色器是对对象的顶点数据执行数学运算的图形处理功能。

  • 多纹理支持 - 多纹理支持是指对 3D 图形对象执行混合操作期间应用两个或更多个不同纹理的功能。 多纹理支持的程度取决于图形硬件中的多纹理单元数。

2、呈现层定义

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

  • 呈现层 0 - 无图形硬件加速。 所有图形功能都使用软件加速。 DirectX 版本级别低于 9.0。

  • 呈现层 1 - 某些图形功能使用图形硬件加速。 DirectX 版本级别高于或等于 9.0。

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

RenderCapability.Tier 属性可用于在应用程序运行时检索呈现层。 使用呈现层可确定设备是否支持某些硬件加速图形功能。 然后,应用程序就可以在运行时根据设备支持的呈现层采用不同的代码路径。

呈现层 0

呈现层的值为 0 意味着设备上的应用程序没有图形硬件加速可用。 在这一层次级别,应假设所有图形都由软件呈现,未采用硬件加速。 该层的功能对应于低于 9.0 的 DirectX 版本。

呈现层 1 与呈现层 2

备注

从 .NET Framework 4 开始,呈现层 1 进行了重新定义,只包含支持 DirectX 9.0 或更高版本的图形硬件。 支持 DirectX 7 或 8 的图形硬件现定义为呈现层 0。

呈现层的值为 1 或 2 意味着,如果必要的系统资源可用并且尚未耗尽,则 WPF 的大部分图形功能会使用硬件加速。 这对应于高于或等于 9.0 的 DirectX 版本。

下表显示呈现层 1 和呈现层 2 的图形硬件需求差异:

展开表

功能 第 1 层 第 2 层
DirectX 版本 必须高于或等于 9.0。 必须高于或等于 9.0。
视频 RAM 必须大于或等于 60 MB。 必须大于或等于 120 MB。
像素着色器 版本级别必须高于或等于 2.0。 版本级别必须高于或等于 2.0。
顶点着色器 没有要求。 版本级别必须高于或等于 2.0。
多纹理单元 没有要求。 单元数必须大于或等于 4。

以下功能对呈现层 1 和呈现层 2 采用硬件加速:

展开表

功能 说明
2D 呈现 支持大多数 2D 呈现。
3D 光栅化 支持大多数 3D 光栅化。
3D 各向异性筛选 WPF 在呈现 3D 内容时尝试使用各向异性筛选。 各向异性筛选是指改善离相机较远且与相机角度较大的图面上纹理的图像质量。
3D MIP 映射 WPF 在呈现 3D 内容时尝试使用 MIP 映射。 纹理占据 Viewport3D 中的较小视图区域时,MIP 映射可改进纹理呈现的质量。
径向渐变 如果支持,请避免在大型对象上使用 RadialGradientBrush
3D 光照计算 WPF 执行每个顶点的光照,这意味着必须在应用于网格的每个材料的每个顶点计算光照强度。
文本呈现 子像素字体呈现使用图形硬件上可用的像素着色器。

以下功能仅对呈现层 2 采用硬件加速:

展开表

功能 说明
3D 抗锯齿 只有支持 Windows 显示驱动程序模型 (WDDM) 的操作系统(如 Windows Vista 和 Windows 7)才支持 3D 抗锯齿。

以下功能采用硬件加速:

展开表

功能 说明
打印内容 所有打印内容都使用 WPF 软件管道呈现。
使用 RenderTargetBitmap 的栅格化内容 使用 RenderTargetBitmapRender 方法呈现的任何内容。
使用 TileBrush 的平铺内容 TileBrushTileMode 属性设置为 Tile 的任何平铺内容。
超过图形硬件最大纹理大小的图面 对大多数图形硬件而言,大型图面是指达到 2048x2048 或 4096x4096 像素大小的图面。
视频 RAM 要求超过图形硬件内存的任何操作 可使用 Windows SDK 中的WPF性能套件包含的分析器工具来监视应用程序视频 RAM 的使用情况。
分层窗口 分层窗口允许 WPF 应用程序将内容呈现到非矩形窗口中的屏幕。 在支持 Windows 显示驱动程序模型 (WDDM) 的操作系统(如 Windows Vista 和 Windows 7)上,分层窗口采用硬件加速。 在 Windows XP 等其他系统上,分层窗口是通过软件来呈现的,未采用硬件加速。 在 WPF 中,可通过设置以下 Window 属性来启用分层窗口: - WindowStyle = None - AllowsTransparency = true - Background = Transparent

3、其他资源

以下资源可帮助你分析 WPF 应用程序的性能特征。

图形呈现注册表设置

WPF 提供了四个注册表设置来控制 WPF 呈现:

展开表

设置 说明
禁用硬件加速选项 指定是否应启用硬件加速。
最大多重采样值 指定用于消除 3D 内容锯齿的多重采样级别。
必需的视频驱动程序日期设置 指定系统是否对 2004 年 11 月之前发布的驱动程序禁用硬件加速。
使用参考光栅器选项 指定 WPF 是否应使用参考光栅器。

知道如何引用 WPF 注册表设置的任何外部配置实用工具都可以访问这些设置。 还可以直接使用 Windows 注册表编辑器来访问这些值,从而创建或修改这些设置。

WPF 性能分析工具

WPF 提供了一套性能分析工具,此工具可帮助分析应用程序的运行时行为,并确定可应用的性能优化类型。 下表列出了 Windows SDK 工具中包括的性能分析工具,WPF 性能套件:

展开表

工具 说明
分析器 用于分析呈现行为。
可视化探查器 用于按可视化树中的元素分析 WPF 服务(如布局和事件处理)的使用。

WPF 性能套件提供丰富的性能数据的图形视图。

DirectX 诊断工具

DirectX 诊断工具 Dxdiag.exe 专门用于帮助你解决 DirectX 相关问题。 DirectX 诊断工具的默认安装文件夹是:

~\Windows\System32

运行 DirectX 诊断工具时,主窗口中包含一组可用于显示和诊断 DirectX 相关信息的选项卡。 例如,"系统"选项卡提供有关计算机的系统信息,并指定安装在计算机上的 DirectX 版本。

"DirectX 诊断工具"主窗口

相关推荐
勇敢小菜鸟1 小时前
WPF自定义窗口 输入验证不生效
wpf
鲤籽鲲1 小时前
WPF TextBox 输入限制 详解
wpf
鸿喵小仙女1 小时前
C# WPF读写STM32/GD32单片机Flash数据
stm32·单片机·c#·wpf
六点的晨曦1 小时前
WPF的右键菜单项目引入DLL和DllImport特性引入DLL文件的异同点
wpf
一个不正经的林Sir1 小时前
C#WPF基础介绍/第一个WPF程序
开发语言·c#·wpf
VinciYan11 小时前
基于Jenkins+Docker的自动化部署实践——整合Git与Python脚本实现远程部署
python·ubuntu·docker·自动化·jenkins·.net·运维开发
码农君莫笑11 小时前
使用blazor开发信息管理系统的应用场景
数据库·信息可视化·c#·.net·visual studio
可喜~可乐14 小时前
C# WPF开发
microsoft·c#·wpf
de之梦-御风15 小时前
【进阶编程】MVVM框架的每层对应那些业务
.net·个人开发·mvvm