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

本文介绍了WinUI 3 Preview 3的发布,探讨了其性能改进,包括ARM64支持和开发工具的增强。作者分享了试玩体验,指出尽管开发体验有所提升,但性能仍有待提高。测试结果显示,WinUI 3在某些场景下性能接近UWP,但存在布局循环和内存占用问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,你需要具备以下条件和环境:

安装完所有东西后,下一步要做的和上次没什么区别,在新建项目的界面里选择 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 部分完全一样,只是动画的代码部分稍微有些出入:

// 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 运行起来有闪烁的现象:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XGlRcFUg-1608210660706)(https://img2020.cnblogs.com/blog/38937/202012/38937-20201208223202442-937355541.gif)]

5. 结论

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H9Fc1Z0T-1608210660706)(https://img2020.cnblogs.com/blog/38937/202012/38937-20201204232342587-366526518.jpg)]

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

<think>好的,我现在要帮用户解决关于JetBrains Rider对WinUI3的支持以及如何在Rider中使用WinUI3的问题。首先,我需要确认用户的需求。用户可能是在开发跨平台桌面应用,并且想使用WinUI3框架,同时偏好使用Rider作为IDE。需要了解Rider是否支持WinUI3项目,以及如何配置和开发。 接下来,我需要回忆相关的知识。WinUI3是微软推出的Windows UI库,用于构建现代Windows应用。而JetBrains Rider是一个跨平台的.NET IDE,支持多种框架。根据引用[1]和[2],微软已经将WinUI开源,这可能促进了第三方工具的支持。引用[1]提到Uno Platform支持WinUI3的方式,可能涉及到跨平台开发,但用户的问题集中在Rider和WinUI3的集成,而不是跨平台。 我需要检查Rider的官方文档或更新日志,看看是否有对WinUI3的支持。由于WinUI3相对较新,可能Rider的支持还在完善中。通常,Rider通过支持对应的项目类型(如.csproj文件)和SDK来提供功能。如果WinUI3项目基于.NET Core或.NET 5+,Rider应该能处理,但可能需要额外配置。 另外,用户可能需要安装特定的SDK或模板。比如,Visual Studio有WinUI3项目模板,但Rider可能需要手动配置项目文件或使用插件。需要确认在Rider中是否可以创建WinUI3项目,或者是否需要从VS创建后导入。 还可能涉及调试和设计界面的支持。WinUI3的设计器可能在Rider中不可用,但开发者可以手动编辑XAML。另外,构建和依赖项管理是否正常,NuGet包是否能正确安装。 需要分步骤解答:首先说明Rider对WinUI3的支持现状,然后详细步骤如何在Rider中配置和开发WinUI3应用,包括项目创建、依赖管理、调试等。可能还需要提到已知的限制或问题,比如设计器支持不足,建议结合Visual Studio使用。 最后,生成相关问题,帮助用户进一步探索,比如调试技巧、项目配置问题、与其他框架的整合等。</think>关于JetBrains Rider对WinUI3的支持,以下是关键信息整理: ### 1. **当前支持状态** - **基础编译支持**:Rider 2023.3及以上版本已支持WinUI3项目的基本编译和调试功能,但需要手动配置项目文件[^2] - **设计器限制**:目前仍缺少可视化XAML设计器,建议通过实时XAML预览插件或配合Visual Studio使用 - **项目创建**:需先通过Visual Studio生成WinUI3项目模板,再在Rider中打开(截止2024年Q2) ### 2. **配置步骤** ```xml <!-- 手动编辑.csproj文件确保包含 --> <PropertyGroup> <WindowsPackageType>None</WindowsPackageType> <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework> <Platforms>x64;arm64</Platforms> </PropertyGroup> ``` 1. 安装.NET 8 SDK和Windows App SDK 1.5+ 2. 在Visual Studio中创建新项目 » 选择"Blank App, Packaged (WinUI 3 in Desktop)" 3. 用Rider打开解决方案文件 4. 通过NuGet安装Microsoft.Windows.SDK.BuildTools ### 3. **调试配置** ```text 调试配置需设置: - 启动类型:Executable - 目标路径:选择项目目录下\bin\x64\Debug\net8.0-windows10.0.19041.0\win10-x64\App.exe ``` ### 4. **已知问题处理** - **MSBuild报错**:在Rider设置中启用"Experimental MSBuild support" - **资源加载失败**:将XAML文件属性设置为"Page" - **热重载限制**:需安装Rider插件"Hot Reload for WinUI"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值