【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 的栅格化内容使用 RenderTargetBitmap 的 Render 方法呈现的任何内容。
使用 TileBrush 的平铺内容TileBrush 的 TileMode 属性设置为 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 版本。

directxdiagnostictool-01.png?view=netframeworkdesktop-4.8


“DirectX 诊断工具”主窗口

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/361623.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【升级openssl1.1.1t报错libssl.so.1.1: cannot open shared object file】

升级openssl报错: openssl vesion openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory 编译安装openssl1.1.1t当执行openssl version的时候,报上述错误,将编译到的…

OCP NVME SSD规范解读-8.SMART日志要求-4

SMART-21:这段描述解释了一个与设备内部I/O操作非对齐相关的计数器功能。该计数器记录的是由NVMe SSD执行的、起始地址未按照设备内部间接寻址单元(IU,Indirection Unit)大小进行对齐的写入I/O操作数量。 “Alignment”指的是每次…

2014年苏州大学837复试机试C/C++

2014年苏州大学复试机试 要求 要求用C/C编程;对程序中必要的地方进行注释。上机规则 请在电脑桌面上新建一个文件夹文件夹名为考试姓名(中文);考试完毕后,将所编写的文件放在上述文件中。 第一题(20分&…

使用ffmpeg madiamtx制作一个rtsp源

有很多人在跑rtsp解码的demo的时候, 苦于找不到一个可以拉流的源, 这里说一个简单的方法. 使用mediamtx, 加ffmpeg加mp4文件方式, 模拟一个rtsp的源. 基本架构就是这样. 在PC上, 这里说的PC可以是远程的服务器, 也可以是你的开发用的windows, 都行. 把mediamtx, 在pc上跑起来 …

如何有效避免市场恐慌性抛售?

布雷特斯坦伯格是一位备受尊敬的交易心理导师,曾担任华尔街多家顶级培训机构的心理导师,指导交易员们如何应对心理挑战。作为一名心理学教授和资深交易员,他对交易心理的理解远超常人。人们普遍认为,要想在交易领域取得成功&#…

BUUCTF-Real-[PHP]XXE

目录 1、原理 2、XXE漏洞产生的原因 3、开始复现 paylaod 复现 4、flag 1、原理 XML数据在传输过程中,攻击者强制XML解析器去访问攻击者指定的资源内容(本地/远程),外部实体声明关键字SYSTEM会令XML解析器读取数据&#xf…

基于SpringBoot的高校社团管理系统

末尾获取源码作者介绍:大家好,我是何时,本人4年开发经验,专注定制项目开发 更多项目:CSDN主页YAML 我欲乘风归去 又恐琼楼玉宇 高处不胜寒 -苏轼 目录 一、项目简介 二、开发技术与环境配置 2.1 SpringBoot框架 2…

sqlmap的使用

2024.1.31 sqlmap支持五种不同的注入模式&#xff1a; 1、布尔盲注2、时间盲注3、报错注入4、联合注入5、堆叠注入 检测注入 GET请求的基本格式 ​python sqlmap.py -u <测试网址> Ps:不知道为什么我的sqlmap使用时前面要加python&#xff0c;而大部分其他教程没提到…

Maven简述

Maven是用于管理和构建Java项目的工具&#xff0c;提供了一套标准化的项目结构&#xff0c;提供了一套标准化的构建流程&#xff0c;提供了一套依赖管理机制&#xff0c;通过Maven使得所有IDE构建的项目结构完全一样&#xff0c;让项目可以通用。 项目名称下分为src 和 pom.xm…

河南省考后天网上确认,请提前准备证件照哦

✔报名时间&#xff1a;2024年1月18号一1月24号 ✔报名确认和缴费&#xff1a;2024年1月 31号一2月4号 ✔准考证打印&#xff1a;2024年3月12号一3月17号 ✔笔试时间&#xff1a;2024年3月16日-2024年3月17日。 ✔面试时间&#xff1a;面试时间拟安排在2024年5月中旬 报名网址&…

【Pwn | CTF】BUUCTF test_your_nc1

天命&#xff1a;时隔两年&#xff0c;又杀回了pwn这里 拿到题目的提示&#xff0c;测试你的nc工具 这题直接连接就可以了&#xff0c;windows装了nc工具&#xff0c;直接耍 nc node5.buuoj.cn 28930 下面给一点nc命令的解释&#xff0c;文心一言得出来的 nc命令是一个用于网…

CTF-WEB的入门真题讲解

EzLogin 第一眼看到这个题目我想着用SQL注入 但是我们先看看具体的情况 我们随便输入admin和密码发现他提升密码不正确 我们查看源代码 发现有二个不一样的第一个是base64 意思I hava no sql 第二个可以看出来是16进制转化为weak通过发现是个弱口令 canyouaccess 如果…

[349. 两个数组的交集](C语言)(两种解法:双指针+排序,哈希)

✨欢迎来到脑子不好的小菜鸟的文章✨ &#x1f388;创作不易&#xff0c;麻烦点点赞哦&#x1f388; 所属专栏&#xff1a;刷题 我的主页&#xff1a;脑子不好的小菜鸟 文章特点&#xff1a;关键点和步骤讲解放在 代码相应位置 前提&#xff1a; 看本文章之前&#xff0c;建…

iOS开发Xcode中的ld64和-ld_classic是什么意思

在iOS应用程序开发中&#xff0c;Xcode是一款广泛使用的集成开发环境&#xff08;IDE&#xff09;&#xff0c;而链接器是构建应用程序的关键组成部分之一。在Xcode中&#xff0c;我们常常会遇到两个重要的概念&#xff1a;ld64和-ld_classic。它们分别代表了默认链接器和经典链…

Linux文本三剑客---awk经典案例

awk&#xff08;是一种处理文本文件的应用程序&#xff0c;它依次处理文件的每一行&#xff0c;并读取里面的每一个字段。&#xff09; awk 包含几个特殊的内建变量&#xff08;可直接用&#xff09;如下所示&#xff1a; 1、获取根分区剩余大小 #可以使用df -h命令来查看所有…

OceanBase与新加坡南洋理工大学合作,推进机器学习与数据库技术融合

1月31日&#xff0c;OceanBase和新加坡南洋理工大学&#xff08;以下简称“南洋理工大学”&#xff09;签署合作协议&#xff0c;探索数据库智能化的技术创新。合作将以OceanBase 4.0 小鱼&#xff08;Paetica&#xff09;为研究基础&#xff0c;推进机器学习与数据库技术融合。…

力扣hot100 数据流的中位数 大小根堆

Problem: 295. 数据流的中位数 文章目录 思路复杂度&#x1f496; Code 思路 &#x1f468;‍&#x1f3eb; 参考 大根堆维护较小值&#xff08;堆顶即中位数&#xff09;&#xff0c;小根堆维护较大值&#xff08;堆顶可能是中位数之一&#xff09;维护小堆长度较长&#x…

初谈C++:缺省参数函数重载

文章目录 缺省参数概述缺省参数的分类全缺省半缺省参数 注意 函数重载概述重载类型不同参数类型不同参数个数不同参数类型顺序不同 C支持函数重载的原理 缺省参数 概述 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时&#xff0c;如果没有指定实参则…

TI AM5708工业派

文章目录 一、TI AM5708工业派简介二、主要使用的功能三、J12 扩展接口四、NFS代码实现总结 一、TI AM5708工业派简介 TI AM5708工业派是基于美国德州仪器&#xff08;TI&#xff09;的AM5708处理器所开发的智能硬件工业派&#xff0c;主要面向工业生产、图像处理、智能人机交…

Java面试题之 IO(四)

Java面试题之 IO&#xff08;四&#xff09; 文章目录 Java面试题之 IO&#xff08;四&#xff09;随机访问流 文章来自Java Guide 用于学习如有侵权&#xff0c;立即删除 随机访问流 这里要介绍的随机访问流指的是支持随意跳转到文件的任意位置进行读写的 RandomAccessFile 。…