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

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

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

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

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

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

    nikenidage1
        29
    nikenidage1  
    OP
       303 天前
    @GiantHard 谢谢谢谢,我还真没测试 linux……也没注意 hidpi 的问题,有可能其他平台也有
    GiantHard
        30
    GiantHard  
       303 天前
    另外, 还不支持在输入框使用 fcitx5 输入法
    roundgis
        31
    roundgis  
       303 天前 via Android
    @infun 這不是微軟做的
    lujiaxing
        32
    lujiaxing  
       303 天前
    @infun 这不是微软做的

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

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

    https://zhuanlan.zhihu.com/p/353853076
    wxf666
        42
    wxf666  
       303 天前
    @nikenidage1 #41 有可执行文件体验吗?

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

    可以 70 万个子窗体、列表框子项之类的吗?
    beginor
        43
    beginor  
       302 天前 via Android
    avalonia 确实不错,.net 跨平台开发利器, 自己做一些小东西还是不错的。

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

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

    ( doge
    kingsword09
        47
    kingsword09  
       301 天前
    楼主,.net 新手,请问 Native AOT 编译有相关教程吗?是要求 .net 8 ,还是现在 .net 7 就可以开启了?
    flytsuki
        49
    flytsuki  
       297 天前
    我写.net 好几年一直不习惯 xaml ,写 Android 一直用的 flutter 。。。
    iorilu
        50
    iorilu  
       295 天前
    学习下, 跨平台桌面软件还是有潜力得
    hez2010
        51
    hez2010  
       294 天前   ❤️ 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
       294 天前
    @hez2010 卧槽,厉害了大佬。请教这些知识哪里可以获得啊? avalonia 的官网似乎没看到?
    hez2010
        53
    hez2010  
       294 天前
    @nikenidage1 Avalonia 官网确实没写。我姑且算是 Avalonia 项目的代码贡献者之一所以有了解到这些东西。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   932 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 22:37 · PVG 06:37 · LAX 15:37 · JFK 18:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.