为什么WinUI3总有一种粘滞感呢?

折腾Windows开发也好多年了,一到谈性能的时候就开始想要寻找比Win32/WPF更好的原生UI框架,结果找来找去只有WinUI3号称是下一代官方标准。但是WinUI3的应用,甚至是demo,点着都有一种好像没卡,研发直觉也告诉我一般切个Tab不可能卡,但是实际上又很慢的感觉。没逐帧测过,纯感觉。

1 个赞

你的感觉是对的,WinUI3应用就是反馈要比操作慢,不太跟手,单纯动画可能看不出什么问题,也可以比较流畅

Win11的任务管理器就是WinUI3写的,有效降低打开欲望

1 个赞

c# 写的软件就是这样的。

micro benchmark 都是无敌。一会儿吊打 java,一会儿连 c++ 都能吊打。

但实际使用就是粘乎乎的。

把它当 macOS 用

macos 主要是 IO 烂。但不至于像 Windows 越来越粘乎乎的。

如果大家对 winxp 有记忆,就会想起来,当年 winxp/win2k 刚安装的时候,右键一下就会快速地弹出菜单。当年都是使用 c 语言编写的程序,软件的界面使用 CPU 绘制好然后一次性送入显卡。

现在使用 c# 编写,实际上是执行字节码,本质上跟运行 js 差不多。程序分块绘制,矩阵、图标啥的都额外准备好,分别送入 GPU 进行渲染。这个渲染分好几层才能真正产生软件界面。更牛逼的是,各种垃圾软件,都在搞动态的软件界面。界面有什么元素,可能是在显示的时候,才会 COM 组件甚至磁盘里面加载布局出来渲染,慢得一匹。

这种崩溃是全局性的。巨硬的软件就是这样已经没救了。

2 个赞

但是WPF就很流畅

macOS现在巨好用了,Computer use极大优化了自动化体验,可以后台不影响前台。Windows一旦被AI接管,前台稍微动一下就影响AI输入了

但是我記得你之前推薦用Java寫桌面程序,Java都能忍的話C#哪裡慢。

那个是有语境的。

当时有个学生想学 Java,但是不知道如何入手,只熟悉 C# 桌面。我推荐他去学 Java 桌面程序,给自己写小工具玩。顺便把 Java 的语法给熟悉了。逐渐转 Java 后端或者 Android 开发。

这都几年前的事了。如果当时听我的话,现在 AI 时代应该能吃到红利。

C# 擅长的应用场景,现在用 AI 一天能写上万行。

可能是这个的问题

Win11的任务管理器是WinUI3、WinUI2、Win32大杂烩,加上WinUI3里不能嵌Win32岛,因此哪怕是一个特别简单的界面,也得大费周折在Win32周围贴一圈XAML岛

Win11这个新版右键菜单每个第三方菜单项都必须MSIX注册,还都用dllhost拉到单独进程里了,一个菜单项一个进程,甚至点右键的时候那些进程才刚启动,这怎么快的起来,加上WinUI3这里有个动画被吞掉了

.NET 10可以AOT了

额,如果你说的是文件资源管理器一块一块显示,那是XAML岛的锅

WPF好像只支持Direct3D 9吧

我說的是之前論壇有人發貼開發桌面應用,你也是極力推薦Java,理由也是Java服務云云,問題是想學Java服務端就直接學就好,用得着繞這麼大圈?桌面端Java哪有需求,而且安卓端早就飽和了,就像有人想學游戲開發,一般也就C++ C#,估計你又來推Java,這不就是「手里有把锤子,看甚麼都像釘子」。

因为你不懂学生的心理啊。

一上来就是叫他们切自己完全不熟悉的领域就容易放弃。

实际上,业内很多 C++ 程序就是从 Qt 入门的。做了一段时间后转工业软件、音视频处理、高性能计算等等。

用 Java 做桌面软件/网页,容易有即时激励。

和C#没关系,单纯是微软的win3问题

那直接C++不更好,非得Java嗎?或者別人學C++ C#去做游戲也行啊。

XAML天坑导致dwm渲染管线等待,底层无解。

WPF很流畅是多少年后硬件性能上来了。刚出的时候,Vista的骂名都忘了?加上win7下dwm的硬件加速的一堆大坑终于修补了。

我觉得还是动画设计的锅吧,epcdiy有吐槽过win11新版右键菜单的动画

那人学 c# 的,大概率是双非大学生,c++ 学不会。让他去学 java 比较稳妥。

游戏早就没得玩了。招聘非常严,好大学都很容易被刷掉面试。

unity 现在最近几年拿来做车机还差不多。不过这个方向也没那么好走。

c# 在 AI 时代已经是在等死的编程语言了。随便学点 ts 都比 c# 强。学 Java 肯定更好。

AI時代Java不是一樣,搞不懂你的邏輯,我還說C++更好呢,而且重點是你一邊嫌C#寫桌面程序不夠流暢,一邊推薦用Java寫桌面程序 :joy: 人不能,至少不應該……

对。WPF 这种大量使用 GPU 的玩法,如果有酷炫的特效,或者像浏览器这种大程序,有大量的图片、视频、效果、文字的混合排版,就能拿到架构的性能增益好处。

但对于普通的 GUI 程序,妥妥的负优化。

再加上 c# 号称 JIT,实际上菜鸟们根本不知道 JIT 实际上也有很大的开销。如果不是服务端那种长期来回跑几个热点函数摊薄了 JIT 的开销。c# 和 java 都是 GUI 的毒药。c# aot 之后还是有大量开销只是巨硬不敢说。

其实 c#, java 也不是不能做 GUI. c# 在 unity 这种引擎里面由底层的 c++ 负责渲染,c# 负责提交模型和实现业务逻辑就行了。

但 wpf 不是这样,它用 c# 写布局和控件绘制。拉完了。