WinUI 3 Preview 3 发布了,再一次试试它的性能

1. WinUI 3

在微软 Build 2020 开发者大会上,WinUI 团队宣布可公开预览的 WinUI 3 Preview 1,它让开发人员可以在 Win32 中使用 WinUI。最终 XAML 的新功能不再和 Windows SDK 绑定,所有新的 XAML 功能都将作为 WinUI 的一部分发布。作为 OS 的一部分发布的现有 UWP XAML API 将不会再收到新的功能更新。但是,它们会在 Windows 10 支持生命周期内继续收到安全更新和关键修复程序。

2. WinUI 3 第三个预览版

微软在上个月(11 月)发布了 WinUI 3 Preview 3,具体新增的特性和功能可以看文章最后给出的参考链接。这里我列出我比较重视的新特性:

  • ARM64 支持

  • 对工具/开发人员的改进:

    • 实时可视化树, 热重载,实时属性资源管理器及类似工具

    • Intellisense 现适用于 WinUI 3

  • MRT 核心支持

    • 这可使应用在启动时速度更快、更轻质,还能加快资源查找速度。

  • 性能改进

这些都是预期之内的改进。在我半年前写的文章《WinUI 3 试玩报告》提到 Preview 1 的开发体验和性能都未能令人满意。这次改进了开发体验,虽然还是没有设计视图,但智能感知、实时可视化树、热重载等功能已经可以让人在 Visual Studio 上进行 WinUI 3 的开发(以前都是在 UWP 项目中写好再复制到 WinUI 项目)。

下面 WinUI 3 公开的路线图,从这图可以看出 WinUI 3 Preview 3 在功能上已经和正式版十分接近,恐怕正式版不会再添加很多值得玩的新功能,所以如果要尝尝鲜的话现在正适合。

3. 试玩 WinUI 3 Preview 3

要试玩 Preview 3,你需要具备以下条件和环境:

  • 确保你的开发计算机上已安装 Windows 10 版本 1803(内部版本 17134)或更高版本。

  • 安装 Visual Studio 2019 版本 16.9 预览版

  • 安装 Visual Studio 时包含以下工作负载:

    • .NET 桌面开发(这也将安装 .NET 5)

    • 通用 Windows 平台开发

  • 安装 WinUI 3 预览版 3 VSIX 包

  • 爱与勇气与希望

安装完所有东西后,下一步要做的和上次没什么区别,在新建项目的界面里选择 C# 的 “Blank App, Packaged (WinUI in Desktop)” 项目,并选择对应的 Windows 平台创建项目。

再下一步,你就需要拿出你的爱与勇气与希望,去网上与其他微软粉丝交流怎么编译这个刚刚创建一行代码都没改过就报错的全新的 WinUI 3 项目:

Cannot build WinUI3 Preview3 desktop package project in fresh installed VS #3635

Why do you waste dev's time with unusable releases ? #3645

有些人第一次就能编译通过并运行,那真是太令人高兴了, 已经没什么好害怕的了,奇迹、魔法,都是存在的。

4. 性能改进?

经过了一段痛苦和挣扎,我终于可以运行 WinUI 3 Preview 3 了。

现在制约我将来使用 WinUI 3 的要素只剩下开发体验和性能。开发体验方面应该不用太担心,将来 WinUI 3 正式版的开发体验至少不会比 UWP 差(UWP 都忍过来了,已经没有什们能难到我了)。另一个我比较在意的地方是性能表现,这方面还是个未知数。本来我还期待 WinUI 3 的性能只比 UWP 差一点点,可是 Preview 1 的实际表现让人大跌眼镜,所以在这个预览版特地提到性能改进让我很期待,于是我再次测试了它的性能。首先用和 《WinUI 3 试玩报告》同样的代码在 Preview 3 进行了测试,结果如下:


CPU内存GPU
WPF .NET Framework 4.8126076
WPF .NET 5.0128572
UWP32836
WinUI Preview 156595
WinUI Preview 364576

虽然 Preview 3 依然不够流畅,但起码 GPU 占用率可以和 WPF 不相上下。这个测试证明了 WinUI 3 的性能确实有了改进,如果单看这个测试的话 WinUI 3 的性能至少比 WPF 好。可是这样还远远不够好,于是我又试了另一种测试。这次我找到最近写的 《使用离散式关键帧播放动画》里的散步猫动画。在这个测试中,WPF 和 WinUI/UWP 的 Xaml 部分完全一样,只是动画的代码部分稍微有些出入:

Copy// Uwp and WinUI
var transform = (sender as Image).RenderTransform as CompositeTransform;
var keyFrames = new DoubleAnimationUsingKeyFrames();
Storyboard.SetTarget(keyFrames, transform);
Storyboard.SetTargetProperty(keyFrames, nameof(CompositeTransform.TranslateY));// Wpf
var transform = (sender as Image).RenderTransform as TranslateTransform;
var keyFrames = new DoubleAnimationUsingKeyFrames();
Storyboard.SetTarget(keyFrames, sender as Image);
Storyboard.SetTargetProperty(keyFrames, new PropertyPath("RenderTransform.Y"));

当然一只猫不足以测试性能,于是我决定同时撸 100 只猫,分别在 .Net Framework 4.8、.Net 5、Uwp、WinUI Preview 3 这 4 个平台进行测试,我的测试环境如下:

  • i7-6820HQ

  • 16G 内存

  • 集成显卡

  • 1920 * 1080 分辨率,100%拉伸

  • Windows 10 20H2

测试结果如下:


CPU内存GPU
WPF .NET Framework 4.8317721
WPF .NET 5.03330021
UWP1255
WinUI Preview 32466
  • WPF .Net Framework 4.8:结果在预期中,177 MB 的内存占用有些高,但个方面都很稳妥。

  • WPF .Net 5.0:WPF 和 WPF 之间的体质不能一概而论,WPF .Net 5.0 曾在极度普通的情况下占用了 3300 MB的内存,吓了我一跳,这种事绝对很奇怪啊,只不过 100 只猫而已,是不是撸不起?

  • UWP:表现也太优异了吧,可能是我的错觉?不过 UWP 也并不是没有问题,只要猫的数量再多些就会报 “Layout cycle detected. Layout could not complete.” 这个错误。

  • WinUI 3:性能基本和 UWP 保持一致,内存占用高些。也就是说某些情况下 WinUI 3 的性能能达到 UWP 的水平,那真是太令人高兴了。可惜的是同样会在猫的数量增加后报 “Layout cycle detected. Layout could not complete.” 这个错误,而且 WinUI 运行起来有闪烁的现象:

5. 结论

WinUI 3 Preview 3 功能、性能、开发体验等各方面都有所提升,尤其性能上某些情况下可以达到 UWP 的水平,但仍有奇怪的问题。总的来说,目前 XAML 平台各有各的问题,没一个能打的。不过 XAML 仍是我最好的朋友,期待下一个版本的 WinUI 能给我惊喜。

最后,微软更新了 WinUI 3 的 Release Roadmap,修改了 WinUI 3 的发布计划。希望正式版快些到来吧,不然 MAUI 要加入战局了。

6. 参考

Announcing WinUI 3 Preview 3! ✨????:
https://github.com/microsoft/microsoft-ui-xaml/issues/3620

Windows UI 库 3 预览版 3(2020 年 11 月):
https://docs.microsoft.com/zh-cn/windows/apps/winui/winui3/?WT.mc_id=WD-MVP-5003763

Windows UI Library Roadmap :
https://github.com/microsoft/microsoft-ui-xaml/blob/master/docs/roadmap.md#winui-30-feature-roadmap

7. 测试代码

https://github.com/DinoChan/WinUI_Preview3_Performance_Test

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

m苹果放n篮子_egg appple千万别翻译为“鸡蛋苹果”,老外听到会懵圈的

egg很熟悉,apple也很熟悉,可是egg apple就让人一脸懵了,鸡蛋苹果是啥玩意?难道中国人有番茄鸡蛋,而歪果仁喜欢鸡蛋炒苹果?1:egg apple 是什么意思?其实英国人眼中的茄子是 egg apple…

基于.NET Core的简单,跨平台,模块化的电子商务系统-SimplCommerce

SimplCommerce是基于.NET Core的简单,跨平台,模块化的电子商务系统官网:www.simplcommerce.com开源地址:https://github.com/simplcommerce/SimplCommerce高层架构在线演示(Azure网站)店面:http…

grade项目导入新external libraries_【易推荐】德意志银行学院中国项目启动

展翅高飞 开阔眼界探索新的机遇总会令人振奋不已。德意志银行集团(以下简称德意志银行或德银)举办了“德意志银行学院”项目(DB Academy,以下简称“德银学院”)。如果同学们有投身金融服务行业的志向,欢迎加入德银学院在中国的项目。“德银学院”项目为…

程序员过关斩将--请不要误会redis 6.0 的多线程

“你对redis的单线程是不是有点误会?“你对redis 6.0的多线程是不是也有点误会?“redis多线程一定可以提高性能吗?redis官方刚刚发布的6.0版本已经掀起了业界一阵热波,在这个版本中新加了很多新特性,如果你打开redis的…

python 防止转义_python字符串前加r、f、u、l 的区别

f-strings 是指以f或F 开头的字符串,其中以 {}包含的表达式会进行值替换。(目前支持python3.6版本)下面看下f-strings的使用方法基本使用(作用:替换值)在字符串前加r可防止字符串转义作用:没有转…

动手实现深度学习pytroch版

深度学习介绍: 数据预处理

c++ eos智能合约开发_[EOS智能合约]第二节:用EOS开发一个To-do List小应用

EOS Asia本教程原文作者为EOS Asia,亚洲最具技术实力和最国际化的EOS超级节点竞选者。EOS Asia 同时也是EOS Gems和Traffic Exchange Token这两个项目背后的开发者。本文由 DappReview 获得 EOS Asia 授权进行翻译并发表。本篇是EOS智能合约系列第二弹,该…

acwing2058. 笨拙的手指(进制转换)

题目含义: 给出一个二进制数,三进制数(这俩数有且一位是错误的) 请输出他们对应的十进制数 原题链接 视频讲解 问题难点: 其他进制转化为十进制算法 大数据的读入 string 按位异或运算(常用的ACSII码值)

使用Github部署Azure应用服务

上次我们介绍了如果使用Azure应用服务(不用虚机不用Docker使用Azure应用服务部署ASP.NET Core程序)。我们通过Visual studio新建一个项目后手动编译发布代码。然后通过FTP上传我们的发布文件。整个过程跟我们手动发布项目到IIS上其实没啥差别。这么操作有点繁琐,显然…

7搭建zabbix_监控03分布式监控Zabbix

监控03-分布式监控Zabbix一、Zabbix概述Zabbix是一个基于Web界面的分布式系统监控与网络设备监控系统,能够监控各种网络参数,并提供灵活的通知机制,以使管理员能快速定位故障并解决。由于zabbix server端与zabbix agent组成,可通过…

acwing2041. 干草堆(差分数组)

题目描述: 原题链接 视频讲解 差分算法(前缀和的逆运算) 差法算法(差分与前缀和的下标都从1开始,避免出现越界) 算法思路:给l,r区间内加上x,则表示为在l的位置+x,在r+1的位置上-x,就可抵消掉+x在r+1开始后的贡献,再利用前缀和就能一次求出答案

各纬度气候分布图_欧洲气候特征:以温带气候类型为主,是海洋性气候最显著的大洲...

气候是一个区域内大气物理特征的长期多年平均状态,是一种相对稳定的自然地理要素,包括气温、热量、降水、光照等气候要素组成。根据全球不同区域的气候特征来划分出不同的气候类型,主要的气候类型包括热带雨林气候、热带草原气候、热带沙漠气…

.NET 5开源项目:b站账号快速升级到 Lv6,每天自动签到,观看,分享,投币视频!...

推荐一个神奇的开源项目:BiliBiliToolhttps://github.com/RayWangQvQ/BiliBiliTool.Net 5 编写的B站(哔哩哔哩)任务工具,通过GitHub Actions实现每日线上自动运行任务:每日自动登录、观看、分享、投币视频,…

acwing2060. 奶牛选美(bfs)

题目描述: 题目描述:在一个二维矩阵中,有两个点的集合,找到最短的距离(从一个集合到另一个集合中)距离的计算方式为(曼哈顿距离) 曼哈顿距离:两点间的曼哈顿距离 = | x1 - x2 | + | y1 - y2 | 输出最短距离 原题链接 视频讲解 问题难点: 二维矩阵使用了字符类型存储 PI…

pandas用均值填充nan_Pandas学习笔记(三)

前言学习Pandas的最好方式就是多用它,只有在实际中多用,才能更好地掌握其中的技巧,这一次我们从数据的聚合来开始。GroupBy的使用聚合的意思指的是对数据框架中某一类型的数据进行整合,在整合后可以对其进行求和、求平均值等操作&…

acwing2019. 拖拉机(最短路径)

题目描述:(边权只有0和1的最短路径问题) 可以走出矩阵 点权{走障碍物:1,不走障碍物:0} 最短路径=路径上障碍物的数量 双端队列:0的时候入队首,1的时候入队尾(只能出队一次,但可以入队很多次) 双端队列的前半段是全为0,后半段全为1. bfs(实际上是一种迪杰斯特拉算法…

有关Quartz.NET,与一线码农大佬对个线?

跟[一线码农大佬]翻译的某技术文对个线最近看到一线码农大佬翻译的《如何在 ASP.NET Core 中使用 Quartz.NET 执行任务调度》,行文思路:安装Quartz.NETQuartz.NET 中的Job,triggers 和 Schedulers创建 Scheduler开启和停止 scheduler创建 job 工厂创建 J…

真的,太多人辜负了.NET5!

.NET5发布一个月了,有没有动手试试?Windows服务器Visual Studio SQL Server做跨平台开发?那你真的辜负了这个时代!强烈建议尝试下Linux,不仅是程序部署,而是全Linux环境开发、运行、部署.NET 5项目&#x…

总结 Visual Studio 2019 发布以来 XAML 工具的改进

不知不觉,Visual Studio 2019 已经出到 16.8 和 16.9 Preview 了。虽然每次更新都林林总总地一大堆新功能和改进,但关于 XAML 的内容总是,always,每次都只有一点点。其实 Xamarin 相关的内容有在使劲地更新,不过和我做…

与您相约.NET Conf China 2020! 新进2位重磅嘉宾

2020年12月19日由.NET众多社区联合组织主办的2020年中国.NET开发者大会将于苏州盛大开幕,明天将发布大会的直播方案,敬请关注。时间:2020/12/19-12/20主题:开源、共享、创新地点:苏州人工智能产业园本次大会以“开源、…