1. WinUI 3
在微软 Build 2020 开发者大会上,WinUI 团队宣布可公开预览的 WinUI 3 Preview 1,它让开发人员能够在 Win32 中使用 WinUI。最终 XAML 的新功能再也不和 Windows SDK 绑定,全部新的 XAML 功能都将做为 WinUI 的一部分发布。 做为 OS 的一部分发布的现有 UWP XAML API 将不会再收到新的功能更新。 可是,它们会在 Windows 10 支持生命周期内继续收到安全更新和关键修复程序。html
2. WinUI 3 第三个预览版
微软在上个月(11 月)发布了 WinUI 3 Preview 3,具体新增的特性和功能能够看文章最后给出的参考连接。这里我列出我比较重视的新特性:git
- ARM64 支持
- 对工具/开发人员的改进:
- 实时可视化树, 热重载,实时属性资源管理器及相似工具
- Intellisense 现适用于 WinUI 3
- MRT 核心支持
- 这可以使应用在启动时速度更快、更轻质,还能加快资源查找速度。
- 性能改进
这些都是预期以内的改进。在我半年前写的文章《WinUI 3 试玩报告》提到 Preview 1 的开发体验和性能都未能使人满意。此次改进了开发体验,虽然仍是没有设计视图,但智能感知、实时可视化树、热重载等功能已经可让人在 Visual Studio 上进行 WinUI 3 的开发(之前都是在 UWP 项目中写好再复制到 WinUI 项目)。github
下面 WinUI 3 公开的路线图,从这图能够看出 WinUI 3 Preview 3 在功能上已经和正式版十分接近,恐怕正式版不会再添加不少值得玩的新功能,因此若是要尝尝鲜的话如今正适合。windows
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 平台建立项目。app
再下一步,你就须要拿出你的爱与勇气与但愿,去网上与其余微软粉丝交流怎么编译这个刚刚建立一行代码都没改过就报错的全新的 WinUI 3 项目:ide
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.8 | 12 | 60 | 76 |
WPF .NET 5.0 | 12 | 85 | 72 |
UWP | 3 | 28 | 36 |
WinUI Preview 1 | 5 | 65 | 95 |
WinUI Preview 3 | 6 | 45 | 76 |
虽然 Preview 3 依然不够流畅,但起码 GPU 占用率能够和 WPF 不相上下。这个测试证实了 WinUI 3 的性能确实有了改进,若是单看这个测试的话 WinUI 3 的性能至少比 WPF 好。但是这样还远远不够好,因而我又试了另外一种测试。此次我找到最近写的 《使用离散式关键帧播放动画》里的散步猫动画。在这个测试中,WPF 和 WinUI/UWP 的 Xaml 部分彻底同样,只是动画的代码部分稍微有些出入:
// 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.八、.Net 五、Uwp、WinUI Preview 3 这 4 个平台进行测试,个人测试环境以下:
- i7-6820HQ
- 16G 内存
- 集成显卡
- 1920 * 1080 分辨率,100%拉伸
- Windows 10 20H2
测试结果以下:
CPU | 内存 | GPU | |
---|---|---|---|
WPF .NET Framework 4.8 | 3 | 177 | 21 |
WPF .NET 5.0 | 3 | 3300 | 21 |
UWP | 1 | 25 | 5 |
WinUI Preview 3 | 2 | 46 | 6 |
- 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>;