8KB的C贪吃蛇游戏热点答疑和。NET7版本
在之前的一篇文章《看我是如何用C#编写一个小于8KB的贪吃蛇游戏》中,介绍了在.NET Core 3.0的环境下如何将贪吃蛇游戏降低到8KB。不过也有很多小伙伴提出了一些疑问和看法,主要是下面这几个方面:
.NET Core 3.0可以做到这么小,那么.NET7表现会不会更好?
不敢在生产中用这样的方式,我看CoreRT这个仓库我看已经归档了。
这样子弄太麻烦了,有没有更简单的办法?
今天笔者就给大家一一解答这些问题。.NET7下的贪吃蛇游戏
我们知道在.NET7中已经发布了NativeAOT正式的支持,经过.NET5、.NET6的迭代,NativeAOT已经基本成熟可用,那么在.NET7中重新编译这个游戏,有没有什么进步呢?让我们来看一看。
有外网条件的朋友可以看下方的这个GITHUB链接的代码,这个代码就是提交了升级.NET7 NativeAOT的实现:https://github.com/MichalStrehovsky/SeeSharpSnake/pull/24使用.NET7单文件发布为了达到我们的目的,对于这个项目的csproj文件需要有一些小的改动。首先就是将对应的TargetFramework修改为net7.0版本。
此时就已经完成.NET Core 3.1到NET7.0的迁移了,我们运行下面的命令,可以获得一个65MB大小的程序,这个和之前.NET Core 3.1没有什么区别。dotnet publish -r win-x64 -c Release 开启IL Linker
另外后面的.NET版本支持更好的程序集剪裁,也就是IL Linker工具,我们运行命令行时/p:PublishTrimmed=true选项就可以启用。dotnet publish -r win-x64 -c Release /p:PublishTrimmed=true 此时我们可以发现,只有11MB大小了,比.NET Core 3.0时代的25MB降低了一半多。 使用NativeAOT功能然后我们就要开始使用.NET7的NativeAOT功能,需要在项目文件中加入true选项。我们加入了一个条件,在平时不开启,只有输入不同Mode的时候才开启。 dotnet publish -r win-x64 -c Release /p:Mode=NativeAOT 此时可以获得一个2.86MB大小的程序,比.NET Core 3.0时代的4.7MB要小了快一半。 使用Moderate模式继续修改csproj文件,让它支持Moderate模式,也就是使用false不生成完整的类型元数据,另外也用Size让编译器为程序大小进行优化,而不是速度。由于后面的模式也需要支持这个,所以加入了很多条件编译的选项。 dotnet publish -r win-x64 -c Release /p:Mode=NativeAOT-Moderate 结果和上面的一样的2.86MB,也就是说现在NativeAOT应该默认就是Moderate模式。 进一步移除无关数据
接下来我们进一步移除无关的数据。
使用false关闭对EventSource的支持
使用true删除 System.* 程序集的异常消息。
使用true删除全球化特定的代码和数据。 dotnet publish -r win-x64 -c Release /p:Mode=NativeAOT-High 此时我们再次发布,可以看到大小已经降低到了2.15MB,比.NET Core 3.0时的3.0MB降低了快30%。 继续移除无关数据
通过false移除堆栈跟踪数据
通过true移除其它语言的支持
通过true将相同的方法体进行合并。只为我们省下了几百KB,此时大小来到了1.88MB。 关闭反射接下来我们可以继续使用true来关闭反射,移除掉一些反射的元数据。 dotnet publish -r win-x64 -c Release /p:Mode=NativeAOT-ReflectionFree 关闭反射后,大小来到了1.21MB,这应该是不用骚操作能达到的最小大小了。 和.NET Core 3.0的对比
下图是.NET7和.NET Core 3.0在不同模式下大小的对比,可以看到经过.NET 5.0、.NET 6.0的发展,NativeAOT变得更加成熟了。模式.NET Core 3.0.NET7.0幅度单文件发布65MB65MB0%IL Linker剪裁25MB11MB-56%NativeAOT4.7MB2.86MB-40%NativeAOT-High3.0MB1.88MB-38%关闭反射1.21MB1.21MB0%关于CoreRT
在博客园的评论中,看到有一位朋友留言,说不敢在生产环境中使用,而且CoreRT已经归档。其实大可放心的使用,CoreRT关闭的原因也正如下面链接仓库里面说的一样,是代码已经合并到runtimelab/nativeaot项目中。https://github.com/dotnet/corert
而NativeAOT已经从实验室中毕业,合并到dotnet/runtime中了,也就是.NET7看到的选项,可以关注下面的微软文档。https://learn.microsoft.com/zh-cn/dotnet/core/deploying/native-aot/NoRuntime用起来很折腾
另外看到评论区大家吐槽的点就是后面那些骚操作看起来很麻烦,有没有更简单的方式?这个其实是有的,上篇文章的作者推出了bflat这个项目。
bflat是Roslyn(生成.NET可执行文件的"官方"C#编译器)和NativeAOT(née CoreRT)的混合物,NativeAOT(née CoreRT)是基于CoreCLR的.NET的提前编译器。因此,您可以使用高性能 CoreCLR GC 和本机代码生成器 (RyuJIT) 访问最新的 C# 功能。
bflat 将两个组件合并到一个用于 C# 的提前交叉编译器和运行时中。bflat目前可以针对:
x64/arm64 基于 glibc 的 Linux(x64 (~CentOS 7) 上为 2.17 或更高版本,arm64 (~Ubuntu 18.04)上为 2.27 或更高版本)
arm64 基于 bionic 的 Linux(Android API 级别 21)
x64/arm64 Windows (Windows 7 或更高版本)
x64 UEFI(仅适用于--stdlib:zero)
对基于 musl 的 Linux 的支持正在开发中。bflat 可以生成本机可执行文件,也可以生成可通过 FFI 从其他语言调用的本机共享库,下面是它的开源地址:https://github.com/bflattened/bflat
使用NoRuntime模式最小可以做到4KB大小,而且支持无操作系统裸机UEFI启动。总结
我们可以惊喜的看到NativeAOT经过几年的发展已经逐步走向成熟,另外还有裸机可运行的C#程序,这给了我们很多的想象空间,可能有那么一天C#程序会运行在只有几百KB内存的物联网终端设备上,UEFI启动程序使用C#编写等等。
英特尔晶圆代工服务新负责人确定当地时间3月21日,英特尔公司宣布,任命StuartPann为英特尔商业代工业务英特尔晶圆代工服务(IFS)的高级副总裁兼总经理,接替该部门首任总经理RandhirThakur博士
腾讯业绩增速下滑,流量红利消失2022年的腾讯还是有一定经营压力的,去年全球腾讯的收入同比下滑1,降到5546亿元,净利润则下滑7,降至1156亿元,分业务来看,腾讯的第一块业务增值服务微降1,网络广告业务下降
徐州,12月份,259。3亿元!阳春三月的彭城大地,扑面而来的,是经济发展的滚滚热潮放眼看到的,是项目建设的风生水起处处洋溢的,是跨越发展的十足干劲。在徐州,一个个大项目好项目落地生根,如火如荼的项目建设场景随处
A股长源电力藏格矿业北方铜业等五家公司重要公告!一长源电力000966关于增资全资子公司并投资建设国能长源潜江浩口200MW渔光互补光伏发电项目的公告为深入贯彻新发展理念,顺应低碳化发展趋势,优化公司电源结构,增加新能源发电装机
上市猪企2月或全员亏损近期,不少上市猪企陆续公布了2023年2月生猪销售简报,新希望温氏股份傲农生物等生猪销量迎来暴涨,温氏股份重回190万头,新希望以173万头创下新高。然而,猪价走势却大相径庭。2月
四大重点产业急需1。2万人才!上海临港发布紧缺人才目录3月22日,上海自贸区临港新片区举办2023科创先锋论坛,临港新片区科技创新重点产业领域紧缺人才目录发布。新片区将按照目录重点引育人才,精准对接产业需求,推动重点产业加快发展。记者
多地推出生育补贴,综合措施需配套发力新华社北京3月22日电题多地推出生育补贴,综合措施需配套发力新华社新华视点记者周闻韬林碧锋近期,多地加快建立积极生育支持政策体系,在生育养育教育等方面拿出真金白银激励生育。新华视点
甘肃天水工厂的精益管理既有智能机械手,还规定水杯的摆放3月17日,甘肃海林中科科技股份有限公司厂房内的智能机械手在加工轴承。李亚龙摄中新网甘肃新闻3月20日电(刘潇崔琳)别看现在工人们和智能机械手配合得很默契,但是在两年前,工人们都不
给自己一个机会他说我就这样了,初中三年就是这么过来的,不会变了你说理科一直是我最头疼的,只能这样了,也就考个专科!经常听见我从来就没做过,肯定干不好,就这样吧。我说这个事情,看上去挺不错,可是我
白酒龙头企业淡季涨价为哪般今年以来,洋河泸州老窖汾酒剑南春等白酒龙头企业都发出了控货涨价的通知。白酒龙头企业淡季涨价的原因是什么,行业目前的库存压力有多大?白酒展柜。龙头企业接连涨价今年以来,白酒龙头企业接
夫妻摆摊夜入9000是真的,官媒被怼得太冤了央视网又翻车了吗?网友又把它怼上了热搜。夫妻两人在夜市摆个小吃摊,一晚上赚9000左右,一个月赚27000,一年就是324w,网友欺负我没上过小学吗?你们信吗?3月19日,央视网发
猫酒店火了!主人出游,猫咪享独立假期,还有美容按摩来源央视财经对于很多养猫人士来说,自己出门远行,把猫咪独自留在家中,心里总会觉得不踏实。在法国巴黎,就有一家可以为宠物主人排忧解难的猫酒店。法国巴黎居民安妮养了一只猫,猫的身体状况
200万!曝赵睿白菜价留在广东队,尽显有情有义今年夏天,对于广东队赵睿转会的传闻,可以说是贯穿了整个CBA休赛期,最终,赵睿与广东队完成了签约,下赛季继续代表广东队参赛CBA联赛。由于周鹏离开了广东队,加盟到了深圳队,因此,朱
中超0广州队斩两连胜北京时间9月13日,中超第18轮广州城对阵广州队。上半场开始阶段广州队快速进攻状态,杨立瑜和吴少聪贡献威胁进攻,但都被韩佳奇扑出,随后广州城也发动进攻,广州队门将张健智同样贡献精彩
8换1!米切尔值不值?正当大伙认为这交易季也就这样的时候,安吉再度出手骑士和爵士达成了一笔8换1的交易协议,骑士送出3个无保护的首轮签(2025年2027年2029年)2个首轮互换权(2026年和202
方桥寻访记作者按本文写于2021年8月,原标题方桥,热闹难再的锡南古村,略有删减。可参看2022年6月的方桥老街。太湖新城中的一条小河,东接尚贤湖巡塘古镇,流经积木般高楼林立的金融街和因地铁
尼泊尔老司机,频繁坠崖文沐沐图文审稿蟹黄捞饭制作木昜音频讲述者沐沐制作赛安封面图网络去过尼泊尔的人都会发现,尼泊尔除了美丽的自然风光外,这个国家给人印象最深的,就是交通状况了。尼泊尔城市交通拥挤,却很少
安医大一项目获批科技创新2030脑科学与类脑研究重大项目来源人民网安徽频道近日,科技创新2030脑科学与类脑研究重大项目2021年度第二批项目立项结果公布,安徽医科大学余永强教授牵头周江宁教授等参与的科研项目哺乳类动物全脑介观立体定位三
文明旅游应是更美风景人民时评抓好文明旅游工作,强化人们的公共意识规则意识文明意识,是扎实推进新时代文明实践的生动体现,也是推动旅游业高质量发展的必然要求最近一段时间,旅游市场持续恢复。行业回暖向好令人欣慰,同
追寻红色足迹,赋能乡村振兴湘潭大学法学学部赴清溪村韶山村泉湖村暑期社会实践团在韶山村的实践调研正式提上日程,此次调研的核心在于探究三村独特的红色文化与当地经济社会发展之间的良性互动作用,以青春之力为乡村振兴
1966年李敏去湖南没回韶山,毛泽东大发脾气你叔叔连饭都吃不饱1966年的一天,办公室内,毛主席罕见地发起了怒火,在他面前站着的是一个30岁左右的女性。对于主席的怒火,她显得有些不知所措,还带着几分委屈。她不明白毛主席为什么发那么大的脾气,自
湖南严柏洪渡口古镇紧靠沩江,临河而建,是有名的鱼米之乡。从明清至民国数百年间,都是通江达海的重要码头,沿河一带建有两百多米长的商铺客栈,几十座吊脚楼一字排开,两个大小码头人来人往,热闹非凡。多少