No C++/CLINo built-in COM (only applies to Windows)Requires trimming, which has limitationsImplies compilation into a single file, which has known incompatibilitiesApps include required runtime libraries (just like self-contained apps, increasing their size, as compared to framework-dependent apps)以上是直接复制的英文文档(原文地址在文末),因为英文不是很好,不进行翻译了,怕误导大家 。主要需要注意的就是 1,2 两点 ,关于动态加载类库跟动态生成代码的问题 。我想序列化的问题大概也就是出在这里,因为传统的序列化需要大量的使用动态生成代码技术 。
总结通过以上我们对 .NET 上最常用的几种程序进行了 Native AOT 发布的测试 。总体来说控制台跟ASP.NET CORE 项目能用,WINFROM 跟 WPF 不能用 。比较遗憾的有两个点:
- ASP.NET COER 在序列化方面貌似还有点小问题 。不知道是不是我环境的问题,如果有知道的大神请指点指点
- 不支持桌面 GUI 程序 。其实从个人的经验来说,桌面端可能对启动速度更加敏感一点,因为c/s程序经常性的打开关闭、打开关闭,如果启动慢用户是很容易察觉的 。如果桌面程序能支持 AOT ,那么能大大改进现在 .NET 程序的启动速度,这对用户体验的提升是非常大的 。服务端的话本身启动一次后就长期运行,用户不会时时刻刻感受到启动速度带来的影响 。另外现在 .NET 程序启动本身就不慢,况且还有 R2R 可以选,正常在100-200ms之间的启动速度已经对用户体验影响不大了 。所以 AOT 之后的启动速度的优势不是很大 。
另外来说说性能,有同学可能觉得 Native AOT 之后性能会有很大的提升,毕竟大家都迷信 Native 速度快嘛 。但是经过大佬们的测试事实上 AOT 之后跟没有 AOT 的代码性能基本在伯仲之间,有些地方甚至不如非 Native 的代码 。为什么?因为非 Native 代码可以进行运行时 JIT 啊,可以在运行时分析代码对热点代码进行二次 JIT 来提升性能,而 Native AOT 之后的代码做不到这点 。
参考Native AOT DeploymentTry the new System.Text.Json source generatorAOT和单文件发布对程序性能的影响
关注我的公众号一起玩转技术

文章插图
经验总结扩展阅读
-
-
-
马丽|马丽也逃不过“中年发福”?穿白衬衫身材圆润不少,连气质都变了
-
-
2022年12月3日求神拜佛好吗 2022年12月3日求神拜佛好不好
-
-
熊猫医学社|40岁男子转氨酶280,确诊肝硬化,医生咆哮:3个习惯,是“祸根”
-
-
鲍里斯·约翰逊|乌克兰本已准备好和谈,却遭英前首相约翰逊竭力阻拦
-
我是文食肆|人生不顺时,默念三句话,你会越来越强大!
-
-
-
2022年农历九月廿三祭祀灶神吉日 2022年10月18日适合祭祀灶神吗
-
-
-
-
泡沫说情感|心理学:凭感觉选一朵蘑菇,测你未来会靠什么发家致富?
-
-
-
2023年农历八月初四宜认干儿子吗 2023年9月18日认干儿子好不好