C++ 和 C# 哪个容易开发出用户体验好(占用资源小&好看&稳定&反应快)的跨 macOS/Windows 平台的桌面程序?

2022 年 3 月 20 日
 rv54ntjwfm3ug8

Electron 不考虑,没见过用 Electron 写的用户体验好的程序,公认优化好的 VS Code 启动也很慢,剩余内存一不够就卡得要死。

目前是有一点 C++ Qt 和 C# WinForm 开发经验。想写一个桌面程序,因为比较喜欢 C#(很多功能都不用自己实现,而且我更熟悉一点),而且听说 C# 的 Avalonia 框架可以用来非常方便地开发好看的跨平台 GUI 程序,于是打算用 C#来写。但 Google 了一下,很多人说 Avalonia 在 macOS 上有很多 non-native 行为,例如复制键变成了 Control-C 而不是 macOS 默认的 Command-C ,而且不是很稳定,经常崩溃,也没有什么知名开源项目在用,资料不好找。想问问 C++ 和 C# 哪个容易开发出用户体验好(好看&稳定&反应快&占用资源小)的跨 macOS/Windows 平台的桌面程序?或是还有什么更好的方案?

好看很重要,最好能方便地实现一些过渡动画。

17111 次点击
所在节点    程序员
131 条回复
secondwtq
2022 年 3 月 20 日
@agagega WASM 的出现与本主题中某人强相关。
同理,我很纳闷为什么 aardio 没有在 #59 就出现。
g00001
2022 年 3 月 20 日
@duke807
"恶心" 到你的 aardio 官网文章,在微信公众号上是高赞文章。
不过你 “恶心” 没错,请继续 “恶心”,支持并赞同你,没毛病。
duke807
2022 年 3 月 20 日
@g00001 不顯示點踩數,那麼點讚數則無意義
g00001
2022 年 3 月 20 日
@duke807 是的是的,就算 aardio 的文章在微信上是高赞,在知乎上是高赞,那都是没有意义的 …… 就算 aardio 作者用了 17 年开发了 aardio 给大家免费使用 …… 也都是没有意义的,把你 “恶心” 到了,这是最严重的问题,没人跟你争,你棒棒的。
g00001
2022 年 3 月 20 日
@FrankHB

aardio + Python 不是在降低门槛,
也不是要求别人会 Python 才能使用 aardio 。
aardio 支持十几种编程语言,不等于要会十几种编程语言。

至于你说的“你要提供一种新的方案当作选择没什么问题,但是没解决原有的问题还会有效添乱的话,那我自然不会有什么好话。”……

那么你在搜索引擎扒了 aardio 那么久,
没 Google 一下 Python + aardio 的文章?!
这是没有解决原来的问题?!
这是“添乱了”?!

aardio 写的录屏工具,780 KB ,没解决原来的问题吗?!


aardio 写的桌入法工具,960 KB , 解决原来的问题吗?!


这些软件都是由 aardio 实现,没有用到 Python ,aardio 并不依赖 Python ,只是可选项。
这些软件都是开源的,你都说了人类命运共同体嘛,是不是?!

说实话你的帖子写得太长,我没仔细看,你似乎在表达 aardio 不适合你,不够这好那好 …… 没毛病,我又没说 aardio 比别的语言好,也没说 aardio 适合你。

任何国外的编程语言都比 aardio 好一万倍。
国产语言能好到哪里去?!本来也没人反对你啥。
saturn7
2022 年 3 月 20 日
如果有能力,上 wxWidgets 。
KoMAsS121
2022 年 3 月 20 日
@g00001 ???阴阳啥啊,了解过价格嘛。VMP 最贵的版本,三端加起来一起买 8000 多港币,你要不买三端,Linux 不买,那就 6000 港币,只买 Win ,那就 4000 港币。你一家公司,这都出不起?这价格你司程序员一个月的工资都不到呢。还是买断的,不用你一年一年的交。并且说真的不少商业库都比这个贵了吧。。。
KoMAsS121
2022 年 3 月 20 日
@g00001 并且你在这里脑补什么啊?把别人的发言极端化?在这阴阳怪气,哪里有问题吗?
商业程序加壳不是正常的操作。。。你用啥语言,只要不想被破解,想维护自己利益,大都会去加壳的啊。
所以在这种情况下,.net 程序会被很容易的反编译本来就不是啥大问题啊。。。安卓那边不加壳也是随便拖呢。但你看有多少人拿 NDK 开发完整的程序。。。
KoMAsS121
2022 年 3 月 20 日
@g00001 并且就我浅薄的认知,我就来提个很主观的观点吧。我个人觉得 C# .net 平台这边怕是商业库搞的最起劲的几个平台之一吧,有一堆优秀的闭源库,还有一堆开源库都有商业版本。。。这或许说明了啥,.net 这边怕是真的有人买,真的能赚钱,所以咋人家开发商业库的就没你这么在乎这点,毕竟按你的想法,作为商业产品能被随意反编译是不可接受的,那应该没啥人来开发商业库啊。。。毕竟会没客户买啊。。。
INCerry
2022 年 3 月 21 日
@daokedao 实测 Electron 启动慢,内存占用大,C# 这种编译型的语言性能好很多。
C#这边跨平台用 Avalonia 还不错的,对标 Sketch 的软件 Lunacy 去年就从 WPF 迁移到 Avalonia 了
你提出的几个需求里面,说说优劣势吧。
占用资源小:C++框架肯定资源占用小一些
好看:C#上面 WPF 库 Avalonia 主题库都挺多 挺好看的
稳定:C#好一些 C++容易写出不安全的代码
反应快:C++胜一筹 但是差距不是很大 C# jit 出来的也是优化后的汇编代码
具体就看楼主选择了,也可以像其它人说的,用 C#写界面,复杂的缓慢的核心计算逻辑用 C++。或者先用 C#快速出活,后面慢慢优化性能,是在不行的地方用 C++
g00001
2022 年 3 月 21 日
@KoMAsS121
我从来没有怀疑过你买得起 VMP ,
更没有把你的发言极端化。也没有与你探讨别人应不应该去加壳。
别人的公司有没有钱,加不加壳,不是你该去管,或者你该去嘲笑的事,管好你自己就行了。

我只是说了一下 C# 写的程序往 ILSpy 里一拖源码就可以导出来,这是一个纯技术问题,你是如何扯到别人公司有没有钱上面?!你的意思是伟大的 ILSpy 是专为穷人开发的?!

根本就没有人跟你争任何东西。
至于你是不是阴阳怪气,根本就没有人在乎,你不需要解释一大堆。
g00001
2022 年 3 月 21 日
微软自己写的很多程序,
都是往 ILSpy 里一拖源码就出来了,这是因为微软买不起 VMP ?!这是因为微软没你家公司有钱?!

我有说过这是坏事吗?!
源码一拖就出来,多好的事,就像楼上那位说的,人类命运共同体嘛!!!

别人的意思都没看懂,就骂起来了,戻气这么重?!
g00001
2022 年 3 月 21 日
刚刚随手搜了一下,看到大家在讨论可以成功还源 VMP 保护的 .Net 源代码,并且工具都写出来了,好吧,我对 .Net 不熟,也没多大兴趣研究这种事,只是前几天刚好看到一个人在网上说用 C# 写了个软件,写完了才很惊讶地发现别人可以轻松地导出 C# 源代码甚至是工程文件,所以我才好心提醒了一下,如果我的好心误伤到了你,那么这不是我的本意。
FrankHB
2022 年 3 月 21 日
@g00001

> aardio 支持十几种编程语言,不等于要会十几种编程语言。
至少还是要会其中任何一种语言吧,否则就只能用 aardio 了。
那么找开发资料会有潜在困难,这个问题上面说了。
只会 aardio 的专业人士我也还没看见,所以交流也是个问题。

> 这是“添乱了”?!
只是提供选项,增加选型成本(起码需要花时间了解 aardio 能干什么)而无助于解决 OP 这样的问题,结果上看就是添乱了。
如果只是要针对非专业人士提供工具,那就找准定位,划清界限,而不是全都要。

> aardio 写的录屏工具,780 KB ,没解决原来的问题吗?!
> aardio 写的桌入法工具,960 KB , 解决原来的问题吗?!
我太不清楚你所谓的“原来的问题”是什么。
我的问题就是嫌弃半吊子方案太多了,没有在业界形成共识,导致各种不痛快。
基于很明显的理由,既然 aardio 连能定制核心的源码都没给,那就没半点解决问题的资格。
我的问题不算数的话,要么你问 OP 去。
g00001
2022 年 3 月 21 日
@FrankHB

不清楚 780 KB 的 Gif123 解决了什么问题?!
不清楚 960 KB 的 WubiLex 解决了什么问题?!

好吧我来告诉你解决了什么问题,这些软件都是非常受欢迎的桌面软件,
由 aardio 编写,开发速度快,代码少,现代化的界面,体积非常小,单文件绿色软件,
无任何外部依赖,兼容 XP ,Vista ,Win7 ,Win8 ,Win10 ,Win11 …… 等所有流行桌面操作系统。

还不清楚 aardio 解决了什么问题,看一下真正 aardio 用户写的感言:
------------------------------------------------

感谢 aardio 作者,我是刚开始用 aardio 写界面(实在不想用 pyqt 了),
python 写数据处理业务,感受到了 aardio 的强大和奇妙。我想把 python 数据处理过程的信息反馈到前端界面中,
《这回让我们把 Python 玩出花来》看完后,用了几分钟搞定!!!实在令人惊讶 aardio 的强大!!!再次感谢 aardio 作者的奉献!!!

我是非专业的,疫情以来这两年就想做点文件处理的工具,
主流软件都摸索了一遍,今天发现了 aardio ,学了一天就整出来了一个工具,
正是我想要到效果。真是相见恨晚啦,太感谢作者大神了,中国人的思维太了不起了。
功能强大而直观,不像所谓到那些主流语言弯弯绕太多。

------------------------------------------------
解决了他们的问题了吗?!
给他们添乱了吗?!

还不清楚 aardio 解决了什么问题。
Google 一下 Python + aardio ,看看为什么很多 Python 用户会推荐 aardio 。

看起来你只会用百度。
你在 “百度” 上扒到了有几个老鼠在喊着要打 aardio 。
这种低质量的文章只有百度会推到首页,在 Google 上是找不到的。
------------------------------------------------

至于你说 aardio 半点解决问题的资格,这就很可笑了。
你是程序员,还是小公主?!谁告诉你 aardio 需要向你申请解决问题的资格?!

VC++ 不开源,所以没解决问题的资格?!
Delphi 不开源,所以没解决问题的资格?!
VB 不开源,所以没解决问题的资格?!

好用的桌面开发工具基本都不开源,所以都没解决问题的资格?!

任何编程语言都需要花时间学习,
你扣了一个 “最起码先要了解 aardio 是做什么”的帽子,就总结出 “添乱”了的罪名?!
请问你什么编程语言不需要花时间学习?! aardio 可能是学习成本最低的。

aardio 支持其他语言,你怪要学其他编程语言有成本。
跟你说其实不需要学习其他语言,你又在怪 “那就只能用 aardio 了”。
这就很有意思了,这也不行,不这样也一定是错的 ?!
g00001
2022 年 3 月 21 日
我只是说了一句 “C# 写的程序往 ILSpy 里一拖就能还原出源代码”,就被上升到人类命运共同体的高度。
还有人自己脑补出 “毕竟按你的想法,作为商业产品能被随意反编译是不可接受的...... " ,我原话有这意思?!

我只是好心提了一个技术问题,提供了一个解决方案,
压根就没兴趣跟你争论这个语言好那个语言不好。争来争去都是别人写的编程语言,你又不是 C# 作者,你也不是 aardio 作者,别搞得自己跟个编程大师似的,膨胀到忘记自己是谁了。

已 Block !
timpaik
2022 年 3 月 21 日
@FrankHB 对于你关于 aardio 不开源的回答,其实大部分没啥问题,不过我个人觉得吧,aardio 这种纯靠 win32 api 实现绝大部分功能的类 lua 软件,开源也基本不可能移植到 mac/linux 就是了。单论 win 桌面开发小工具,aardio 效率还是没得说的,性能上勉勉强强看得过去,主要是调用 win32 的 api 方便,标准库够用,缺点就是各家厂商报毒(
@g00001 感觉推广 aardio 和这个帖子主题没啥关系,这样推荐容易让很多人对 aardio 产生不好的影响,我建议言辞请舒缓些

顺便,我其实推荐 tauri (当然如果你会用 rust 的话,个人项目可以用用),优点是清真,缺点是 webview 可能需要下载
业界跨平台成熟方案是 qt/cpp 和 electron ,c#基本没有生产可用的跨平台框架,生产环境还是建议用成熟的。
gaodeng
2022 年 3 月 21 日
跨平台和用户体验好本身就是矛盾的,不可能同时存在啊
g00001
2022 年 3 月 21 日
@timpaik

我的第一贴根本就没有提 aardio ,仅仅是没有说了几句与跨平台有关的建议,要不您再回去看看?!
然后有人纠结 C# 源码被 ILSpy 反编译的话,我说了句用 aardio + C# 可以比较简单地避免这个问题。

然后某人开始疯狂扒 aardio 的负面文章,”没有解决问题了还添乱“,”简直是老鼠过街、人人喊打“ …… 这些言辞非常的不舒缓,您可以回去仔细看看到底是谁不舒缓?!

我再说一次,类似前面有人说 “毕竟按你的想法,作为商业产品能被随意反编译是不可接受的...... " ,
我压根就没说过这话 …… 我的原话是非常简单的一句 ”提醒下 C # 写的程序往 ILSpy 里一拖就可以还原源代码“。

我觉得您更应当担心一下,
这么过激地 ”推广“ .Net 容易让很多人对 .Net 产生不好的影响。
毕竟 .Net 在国内的现状不是很乐观。

————————————————————————————————————

至于你担心有人对 aardio 产生不好的影响。
在知乎上有人曾经问过这么一个问题,为什么同是国产语言,aardio 在网络上的评价一直很好,而某些国产语言的名声就很差,既然经历十几年风雨的 aardio 都没有被不好影响,所以我们也没必要高估在这里喷几句的影响力?!

V2 不是一个问答网站,作为一个开放论坛,在讨论中可能出现跑题现象,例如楼上跑题到人类命运共同题,VMP ,公司有没有钱 …… 你都没有提到?!但是你却注意到了这个讨论桌面软件开发的帖子里不该提到一个专注桌面开发工具:aardio ?!

————————————————————————————————————


至于你说的:” aardio 这种纯靠 win32 api 实现绝大部分功能的类 lua 软件 “
————————————————————————————————————

这我就要纠正你一下了:

1 、所有在 Windows 上运行的软件,都要调用系统 API ,即使是跨平台的方案都一样。
Win API 是公共 API ,这又不是只有 aardio 才知道去使用,你认为那些开源的、跨平台的组件他们不知道,或者不需要调用 Win API ?!

Python 的很多界面库都是基于 C++ 的组件,这些组件都在大量调用 Win API ,多调几句 Win API 就能解决 Python 写桌面图形界面的难题谁不原意干?!

2 、aardio 并非纯靠 API 实现大部分功能。
恰恰相反,aardio 的大部分功能是纯 aardio 源码实现的。
aardio 的界面库也是纯 aardio 源代码实现 —— 也就是标准库的 win.ui ,完全开源。

虽然 Python 的很多界面库是基于 C++ 的组件,
但是这个纯 aardio 源码实现的界面库,仍然吸引了很多 Python 的用户,所以你能搜到非常多 Python + aardio 的分享文章。

aardio 大部分功能由标准库实现,
而 aardio 的整个标准库都是开源的,或者说 aardio 的大部分功能都是开源的。

3 、aardio 编写的软件对系统的依赖较小

例如 Python 3.5 不支持 XP ,Python 3.9 不支持 Win7 ,估计后续版本还有可能不支持 Win10 ,Win11…… 然而 aardio 直到最新版本都可以完美兼容 XP ,Vista ,Win7 ,Win8 ,Win10 ,Win11...... 就是因为 aardio 的大部分功能是由纯 aardio 源码实现,对系统的依赖非常小。

————————————————————————————————————

回到你的问题,aardio 为什么不开源,
应当去看看官网的文章,不要自己在那里 ”瞎猜“ —— 不好意思,用力太猛了一些,可能不够舒缓了,抱歉抱歉。
g00001
2022 年 3 月 21 日
很多人对跨平台明显有误解,不调 Win API 你连个创建窗口都干不了。

你怎么跨平台,在 Windows 上还是要单独编译 EXE 这种专用格式。你的桌面软件写完了以后,你还是不得不被迫与很多系统专有的接口打交道,我举个简单的例子。来个系统夺权,aardio 写就一句

import thread.trustedInstaller;
thread.trustedInstaller(
function(){

}
)

你打算怎么跨平台?!

来个 UAC 免警告启动,aardio 就一句:

import sys.runAsTask;
var task = sys.runAsTask("WifiRepaire","无线网卡修复程序");
task.register("/task");

你打算怎么跨平台?!这样的例子我可以举出一大堆。

你跨平台你好多东西做不了,或者做起来麻烦。
对于桌面软件,跨平台是个伪命题,别忘记一个最简单的事实,macOS + Linux 的桌面市场份额小于过气的 Win8 。

除了那种打包式无脑跨平台,还有一种部分跨平台。
例如 Python 是跨平台的,而 aardio 是 Windows 专有开发工具。
可以用 Python 写大部分跨平台的代码,但是在 Windows 上使用 aardio 编译为 Windows 软件,实际上这样搞的人也不少。

这只是举个例子,aardio 里可以调用十几种编程语言或这些语言的组件。
而且这种调用特别简单,像 aardio 里直接就可以调用所有 Python 函数,在 Python 里也直接可以调用 aardio 函数,你都不需要写什么中间封装代码。

再例如 C# /.Net ,在 aardio 里直接就可以调用 C# 的对象、函数,反过来 C# 也可以直接调用 aardio 函数,就是很直接的使用那种,例如我前面发的那个调用 .Net 组件,你用 aardio 去调 .Net 组件,都看不出跟 C# 去调用这些组件有什么太大的区别。关键是 aardio + C# 还不挑 .Net 版本,可以内存加载 DLL 程序集,非常方便的生成独立 EXE 。

再或者说调用 PowerShell ,你可以直接在 aardio 里调用 PowerShell ,你也可以在 PowerShell 里直接调用 aardio 的对象、函数,非常简单,不用去搞太多的封装,直接调。

…… 不好意思,嗯嗯,一不小心又帮 aardio 推广了一下,罪过罪过。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/841554

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX