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.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 部分完全一样,只是动画的代码部分稍微有些出入:

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.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

WinUI 3 Preview 3 发布了,再一次试试它的性能相关推荐

  1. .NET 6 Preview 2 发布

    前言 在 2021 年 3 月 11 日, .NET 6 Preview 2 发布,这次的改进主要涉及到 MAUI.新的基础库和运行时.JIT 改进. .NET 6 正式版将会在 2021 年 11 ...

  2. .NET Core 2.1 Preview 1发布:更快的构建性能

    今天,我们宣布发布 .NET Core 2.1 Preview 1.这是 .NET Core 2.1 的第一个公开发布.我们有很大的改进希望分享出来,并且渴望得到您的反馈意见,无论是在评论中还是在gi ...

  3. 马化腾、马云并列成为中国首富;百度回应“将上线电商直播”;.NET 5 Preview 2 发布 | 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 一分钟 ...

  4. .NET 6 Preview 3 发布

    前言 2021/4/8 .NET 6 Preview 3 发布,这个版本的改进大多来自于底层,一起来看看都有什么新特性和改进吧. 库改进 新增值类型作为字典值时更快的处理方法 .NET 6 Previ ...

  5. 【翻译】.NET 5 Preview 1 发布

    .NET 5 Preview 1 发布 去年年底,我们发布了.NET Core 3.0和3.1.这些版本添加了桌面应用程序模型Windows Forms(WinForms)和WPF,ASP.NET B ...

  6. .NET Core 3 Preview 2发布,C#8更强大的模式匹配

    .NET Core 3 Preview 2 发布了,此版本主要带来了 C# 8 相关的新功能,C# 8 Preview 2 是 .NET Core 3 SDK 的一部分. C# 8 中使用模式进行更多 ...

  7. Visual Studio 15 Preview 5 发布 大幅提升性能

    Visual Studio 15 Preview 5 发布了,该版本包括许多新的提升和 bug 修复. 微软发布了 Visual Studio 15 的第 5 个预览版本.据微软描述,Preview ...

  8. .NET Core 3 Preview 2 发布,C# 8 更强大的模式匹配

    .NET Core 3 Preview 2 发布了,此版本主要带来了 C# 8 相关的新功能,C# 8 Preview 2 是 .NET Core 3 SDK 的一部分. C# 8 中使用模式进行更多 ...

  9. 滴滴上线自动驾驶服务;微软宣布将永久关闭实体店;.NET 5.0 Preview 6 发布 | 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极 ...

最新文章

  1. Pycharm中一些不为人知的技巧pycharm技巧
  2. 什么是Python线程?Python线程如何创建?
  3. LiveVideoStackCon 2018日程(草稿)发布
  4. python错误-Python错误解决
  5. C#中提示:当前上下文中不存在名称“ConfigurationManager”
  6. Snuke Festival(二分法)
  7. git 怎么备份本地分支_Git常用个人备份笔记
  8. 安卓java音乐播放器下一曲_Android实现简单音乐播放器(MediaPlayer)
  9. VMWARE VICLIENT实现虚拟机独立管理
  10. mysql如何给一个数据库所有表都增加一个字段?
  11. Linux中tshark(wireshark)抓包工具使用方法详解
  12. gn: toolchain
  13. 题目 1427: 蓝桥杯2013年第四届真题-买不到的数目
  14. 如何评估服务器基础性能 - CPU负载、使用率、内存磁盘使用率、网络带宽......
  15. 实现 3D 时间动画展示效果
  16. python给列表的N个元素赋值-*表达式
  17. 【人工智能项目】Fashion Mnist识别实验
  18. 论职业素养课程在IT职业教育中的重要性
  19. 第三章,矩阵,06-初等变换与初等矩阵
  20. 附指南原文下载-《GB/T 39725-2020 信息安全技术 健康医疗数据安全指南》解读(一)

热门文章

  1. kafka 服务端消费者和生产者的配置
  2. js获取屏幕宽高和下拉加载更多
  3. platform_set_drvdata和platform_get_drvdata用法【转】
  4. ReactNative--React简介
  5. day10 多媒体(文字 图片 音频 视频)
  6. day19(中)_IO流3(模拟缓冲区,装饰设计模式)
  7. pl/sql 中关于exception的学习笔记
  8. chromebook刷机_如何获取Android应用以查看Chromebook上的外部存储
  9. 洛谷P5055 【模板】可持久化文艺平衡树(FHQ Treap)
  10. 12C RAC for ASM添加磁盘步骤