通过分析 WPF 的渲染脏区优化渲染性能

栏目: ASP.NET · 发布时间: 5年前

内容简介:在此处编辑 blog.walterlv.com 的博客摘要在计算机图形渲染中,可以每一帧绘制全部的画面,但这样对计算机的性能要求非常高。脏区(Dirty Region)的引入便是为了降低渲染对计算机性能的要求。每一帧绘制的时候,仅仅绘制改变的部分,在软件中可以节省大量的渲染资源。而每一帧渲染时,改变了需要重绘的部分就是脏区。

在此处编辑 blog.walterlv.com 的博客摘要

脏区 Dirty Region

在计算机图形渲染中,可以每一帧绘制全部的画面,但这样对计算机的性能要求非常高。

脏区(Dirty Region)的引入便是为了降低渲染对计算机性能的要求。每一帧绘制的时候,仅仅绘制改变的部分,在软件中可以节省大量的渲染资源。而每一帧渲染时,改变了需要重绘的部分就是脏区。

以下是我的一款 WPF 程序 Walterlv.CloudKeyboard 随着交互的进行不断需要重绘的脏区。

通过分析 WPF 的渲染脏区优化渲染性能

可以看到,脏区几乎涉及到整个界面,而且刷新非常频繁。这显然对渲染性能而言是不利的。

当然这个程序很小,就算一直全部重新渲染性能也是可以接受的。 不过当程序中存在比较复杂的部分,如大量的 Geometry 以及 3D 图形的时候,重新渲染这一部分将带来严重的性能问题。

WPF 性能套件

先下载 WPF 性能套件:

脏区监视

启动 WPF Performance Suite,选择工具 Perforator,然后在 Action 菜单中启动一个待分析的 WPF 进程。虽然 工具 很久没有更新,但依然可以支持基于 .NET Core 3 版本的 WPF 程序。

通过分析 WPF 的渲染脏区优化渲染性能

当程序运行起来后,可以看到 WPF 程序的各种性能数据图表。

通过分析 WPF 的渲染脏区优化渲染性能

现在将 Show dirty-region update overlay 选项打勾即可看到本文一开始的脏区叠加层的显示。

与脏区有关的选项有三个:

  • Show dirty-region update overlay
    • 显示脏区叠加层,每一次脏区出现需要重新渲染时会叠加一层新的半透明颜色。
  • Disable dirty region support
    • 禁用脏区支持。这时,每次渲染都将重绘整个窗口。
  • Clear back-buffer before rendering
    • 每次重绘之前都将清除之前所有的绘制,使用此选项,你可以迅速找到界面中频繁刷新的部分,而重绘频率不高的部分多数时候都是纯黑。

优化脏区重绘

一开始的程序中,因为我使用了模拟 UWP 的高光效果,导致大量的控件在重绘高光部分,这是导致每一帧都在重新渲染的罪魁祸首。

于是我将高光渲染关闭,脏区的重新渲染将仅仅几种在控件样式改变的时候(例如焦点改变):

通过分析 WPF 的渲染脏区优化渲染性能

光照效果可以参见我的另一篇博客:

参考资料


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

高性能MySQL

高性能MySQL

施瓦茨 (Baron Schwartz)、扎伊采夫 (Peter Zaitsev)、特卡琴科 (Vadim Tkachenko) / 宁海元、周振兴、彭立勋、翟卫祥,刘辉 / 电子工业出版社 / 2013-5-1 / 128.00元

《高性能mysql(第3版)》是mysql 领域的经典之作,拥有广泛的影响力。第3 版更新了大量的内容,不但涵盖了最新mysql 5.5版本的新特性,也讲述了关于固态盘、高可扩展性设计和云计算环境下的数据库相关的新内容,原有的基准测试和性能优化部分也做了大量的扩展和补充。全书共分为16 章和6 个附录,内容涵盖mysql 架构和历史,基准测试和性能剖析,数据库软硬件性能优化,复制、备份和恢复,高可......一起来看看 《高性能MySQL》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具