V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nikenidage1
V2EX  ›  程序员

用 .Net 写了一个跨平台的桌面端软件,且原生编译,无需运行时,启动快内存少体积小

  •  
  •   nikenidage1 · 2023-06-29 10:07:55 +08:00 · 7104 次点击
    这是一个创建于 460 天前的主题,其中的信息可能已经有所发展或是发生改变。
    实验性的小东西,实时显示你今天赚了多少钱
    采用了 .Net 的技术,可以跨平台,并且利用 Native AOT 进行原生编译,无需运行时,启动快内存少体积小
    软件截图见 https://jihulab.com/nikenidage/DailyMoney/-/raw/main/screenshot_1.png

    下载放在了国内的 gitlab 上。macos 暂时不支持 m1 ,两个原因,.Net8 才支持 m1 还没正式发布,github 的 action 也不支持 m1
    https://jihulab.com/nikenidage/DailyMoney/-/releases
    源代码在 github
    https://github.com/nikenidage/DailyMoney

    这个框架理论上 android 和 ios 也支持,暂时没有研究
    53 条回复    2023-07-08 23:22:38 +08:00
    nikenidage1
        1
    nikenidage1  
    OP
       2023-06-29 10:32:47 +08:00
    新人没有人权啊,没人回复 😂
    Syiize
        2
    Syiize  
       2023-06-29 10:47:21 +08:00 via Android   ❤️ 1
    这个东西怎么记录赚的钱啊,自己设定每小时的钱数吗
    nikenidage1
        3
    nikenidage1  
    OP
       2023-06-29 10:48:38 +08:00   ❤️ 1
    @Syiize 啊对对哈哈,软件功能不重要,主要是试验下技术
    towser
        4
    towser  
       2023-06-29 10:57:12 +08:00
    不知道 Avalonia 现在坑多不多
    lujiaxing
        5
    lujiaxing  
       2023-06-29 11:05:52 +08:00
    来支持一下 Windows 7.
    nikenidage1
        6
    nikenidage1  
    OP
       2023-06-29 11:08:14 +08:00
    @lujiaxing 先不支持了太累了🙂,记得是可以支持的,多加几个 dll
    xieren58
        7
    xieren58  
       2023-06-29 11:20:10 +08:00
    Avalonia 已经 11.rc 了啊... 你这个还没升级...
    idragonet
        8
    idragonet  
       2023-06-29 11:22:00 +08:00
    NET 7 支持跨平台的桌面端软件?
    Mithril
        9
    Mithril  
       2023-06-29 11:22:08 +08:00
    @towser 坑倒是不多,不过如果你想要做一个交互比较丰富的 App ,那要花很大精力去做各种控件。
    预算足够倒是没问题。
    Akuikkk
        10
    Akuikkk  
       2023-06-29 11:25:26 +08:00
    你这个截图,也看不出是什么啊,桌面悬浮吗?
    nikenidage1
        11
    nikenidage1  
    OP
       2023-06-29 11:25:39 +08:00
    @idragonet 哈哈 不止 7 支持 5 6 就支持了,重点是现在可以原生编译
    nikenidage1
        12
    nikenidage1  
    OP
       2023-06-29 11:26:02 +08:00
    @Akuikkk 对对 桌面悬浮
    x77
        13
    x77  
       2023-06-29 11:26:59 +08:00
    如果我不给另外一个平台折腾 .NET 运行环境,能跨吗?
    nikenidage1
        14
    nikenidage1  
    OP
       2023-06-29 11:29:56 +08:00
    @x77 能跨啊,原生编译,编译到这个平台了,不需要.NET 运行环境了。
    ccyixia
        15
    ccyixia  
       2023-06-29 11:31:35 +08:00
    楼主你好,我对 .net 刚刚上手,"macos 暂时不支持 m1",这个我没搜到相关的啊,难道用.net 开发的 app 现在没法在 m1 上运行?还是只是 native AOT 没法用?
    html
        16
    html  
       2023-06-29 11:31:42 +08:00
    @nikenidage1 支持发布成单文件吗
    nikenidage1
        17
    nikenidage1  
    OP
       2023-06-29 11:34:39 +08:00   ❤️ 1
    @ccyixia native aot 没法用,也就是没法原生编译到 m1 m2 的 cpu ,其他正常
    nikenidage1
        18
    nikenidage1  
    OP
       2023-06-29 11:35:44 +08:00
    @html 支持的,.net 可以发布成单文件的,但是 native aot 后就不行了,有几个依赖的 dll ,也可能可以合并,没研究
    monkeyWie
        19
    monkeyWie  
       2023-06-29 11:39:50 +08:00
    我的评价是不如用 flutter ,flutter 写的桌面软件也是原生编译的,支持的平台更多,而且编译出来的体积也就 10 来兆
    xieren58
        20
    xieren58  
       2023-06-29 11:43:44 +08:00
    flutter 桌面 bug 一大堆...
    infun
        21
    infun  
       2023-06-29 11:45:46 +08:00
    微软不可靠,说不定啥时候就放弃或者出一个新的不兼容的版本
    nikenidage1
        22
    nikenidage1  
    OP
       2023-06-29 11:49:47 +08:00
    @infun 这个没必要为了黑而黑哈,而且这框架不是微软的,社区的,https://avaloniaui.net/
    x77
        23
    x77  
       2023-06-29 11:52:57 +08:00
    要不楼主也看看 Flutter ,相较于 .NET 优势很明显

    - 加载迅速,底层直接跑 Win32 ,人家在底层实现上做了不少工作,没有依赖 .NET ,真货(不是包皮货)。而 .NET ,我都不知道微软怎么想的,Windows 内置的一些工具加载都要几十秒,甚至要 1 分钟。

    - 硬件加速支持,在些情况下 Flutter Windows 上可以走 GPU 渲染,虽然这个不完善,但是人家设计上有这个大局观。

    - 框架支持主题、颜色模式,长得漂亮。.NET Windows 11 年代了开发的 App 默认还是 WinXP 时代的样貌。
    tensorzhang
        24
    tensorzhang  
       2023-06-29 11:56:03 +08:00
    和 UNO 对比的话,哪个更好一点?
    tensorzhang
        25
    tensorzhang  
       2023-06-29 11:56:33 +08:00
    @tensorzhang https://platform.uno/
    apostleChan
        26
    apostleChan  
       2023-06-29 11:57:23 +08:00 via Android
    maui 开发的吗
    nikenidage1
        27
    nikenidage1  
    OP
       2023-06-29 11:58:35 +08:00
    @x77 你说这个几个优势大家都一样的啊。。。原生编译后就不依赖.NET 了,硬件加速和主题,这大家都一样
    @tensorzhang 这个不了解啊哈哈,我只是找一个看起来大一点的,毕竟这个 avalonia jetbrains 的 rider 默认支持
    GiantHard
        28
    GiantHard  
       2023-06-29 12:02:40 +08:00
    Linux Wayland hidpi 缩放有问题,没有跟随系统设置缩放。

    nikenidage1
        29
    nikenidage1  
    OP
       2023-06-29 12:04:32 +08:00
    @GiantHard 谢谢谢谢,我还真没测试 linux……也没注意 hidpi 的问题,有可能其他平台也有
    GiantHard
        30
    GiantHard  
       2023-06-29 12:05:06 +08:00
    另外, 还不支持在输入框使用 fcitx5 输入法
    roundgis
        31
    roundgis  
       2023-06-29 12:09:34 +08:00 via Android
    @infun 這不是微軟做的
    lujiaxing
        32
    lujiaxing  
       2023-06-29 12:25:48 +08:00
    @infun 这不是微软做的

    而且类似的还有 uno 项目. 同样不是微软做的.
    elechi
        33
    elechi  
       2023-06-29 13:42:23 +08:00
    avalonia 发展还是比较慢
    xieren58
        34
    xieren58  
       2023-06-29 15:22:48 +08:00
    @elechi 下个月 11 正式出来...
    aiqinxuancai
        35
    aiqinxuancai  
       2023-06-29 15:47:03 +08:00
    微软脑子有坑,到现在 UI 跨个平台还要用第三方,这么多年就一个 WPF 能打,还不能跨平台,新出个 MAUI 连自家 Win7 都用不了
    jstony
        36
    jstony  
       2023-06-29 16:00:54 +08:00
    @aiqinxuancai win7 支持周期早都结束了,为啥要支持。
    yazinnnn
        37
    yazinnnn  
       2023-06-29 16:19:53 +08:00
    话说.net8 对 fsharp 项目的 aot 支持程度如何了?
    idealhs
        38
    idealhs  
       2023-06-29 16:56:05 +08:00
    相对于阿瓦隆尼亚,我更看好 MAUI
    aiqinxuancai
        39
    aiqinxuancai  
       2023-06-29 18:22:34 +08:00
    @jstony 你问问微软他新出的 edge 为啥要支持 win7
    wxf666
        40
    wxf666  
       2023-06-29 18:44:10 +08:00
    27 MB ,快赶上 QT 了。。

    另外,占用 100 MB 内存,快赶上 Electron 应用了。。
    nikenidage1
        41
    nikenidage1  
    OP
       2023-06-29 19:08:15 +08:00
    @wxf666 哈哈,内存的问题,可能是我技术不到位,又或者是这个 ui 框架的锅,真实情况可以参见这位大佬的文章,其中提到
    “将自己的可视化通用旅行商问题解算器应用使用 NativeAOT 编译后得到了一个 40mb 大小的应用程序(无需运行时),可以瞬间启动且运行时内存占用不到 20mb”
    “左侧是一个包含接近 70 万个节点的折线图,可以 60 fps 的体验(其实可以更高,但对于桌面 GUI 应用来说 60 fps 渲染是一个默认的设定)随意滑动、缩放和跟踪点,完全不带一点卡顿”

    https://zhuanlan.zhihu.com/p/353853076
    wxf666
        42
    wxf666  
       2023-06-29 19:28:06 +08:00
    @nikenidage1 #41 有可执行文件体验吗?

    那个折线图是定制过的吗?

    可以 70 万个子窗体、列表框子项之类的吗?
    beginor
        43
    beginor  
       2023-06-30 08:36:55 +08:00 via Android
    avalonia 确实不错,.net 跨平台开发利器, 自己做一些小东西还是不错的。

    不过就是没有什么第三方资源, 比如控件库之类的,因为本身就是个第三方库。

    支持 mac m1 , 著名的 ryujinx 模拟器就是 Ava 开发的界面。
    itianjing
        44
    itianjing  
       2023-06-30 08:48:50 +08:00
    定睛一看,钱咋越走越少呢,惊出一身冷汗,原来我在付费打工。
    再仔细一看,金额是负数,那就还算是往上涨的。
    可是问题来了,打了十几分钟工为啥还赚了负数的钱呢。
    nikenidage1
        45
    nikenidage1  
    OP
       2023-06-30 10:20:42 +08:00
    @itianjing 啊哈哈 可能有 bug ,这不重要
    @wxf666 好像没有,大佬没提供
    FakerLeung
        46
    FakerLeung  
       2023-06-30 11:00:33 +08:00
    摸鱼才叫赚钱。
    上班那叫赔偿。

    ( doge
    kingsword09
        47
    kingsword09  
       2023-07-01 09:24:07 +08:00
    楼主,.net 新手,请问 Native AOT 编译有相关教程吗?是要求 .net 8 ,还是现在 .net 7 就可以开启了?
    nikenidage1
        48
    nikenidage1  
    OP
       2023-07-01 13:22:03 +08:00
    flytsuki
        49
    flytsuki  
       2023-07-05 08:55:57 +08:00
    我写.net 好几年一直不习惯 xaml ,写 Android 一直用的 flutter 。。。
    iorilu
        50
    iorilu  
       2023-07-07 16:11:27 +08:00
    学习下, 跨平台桌面软件还是有潜力得
    hez2010
        51
    hez2010  
       2023-07-08 12:49:34 +08:00   ❤️ 2
    @nikenidage1 Avalonia 11 的内存占用稍微大了一些其实是因为启用了新的 GPU 加速的合成渲染器,这个渲染器性能很好但是有一定的内存占用,虽然这部分内存占用其实不来自 Avalonia ,而是来自 ANGLE (一个 OpenGL ES 库)。
    如果想要回归到原来的那种软件渲染可以在你的 Program.cs 的 BuildAvaloniaApp 函数里面加

    ```csharp
    .With(new Win32PlatformOptions
    {
    RenderingMode = new[] { Win32RenderingMode.Software }
    })
    ```

    内存占用立即降到只有 30mb 左右。
    nikenidage1
        52
    nikenidage1  
    OP
       2023-07-08 17:46:11 +08:00
    @hez2010 卧槽,厉害了大佬。请教这些知识哪里可以获得啊? avalonia 的官网似乎没看到?
    hez2010
        53
    hez2010  
       2023-07-08 23:22:38 +08:00
    @nikenidage1 Avalonia 官网确实没写。我姑且算是 Avalonia 项目的代码贡献者之一所以有了解到这些东西。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   741 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 21:12 · PVG 05:12 · LAX 14:12 · JFK 17:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.