关于.NET 6.0 Crossgen2的一些研究
NET 6.0引入了Crossgen工具的后续版本Crossgen2,这个工具提供了程序提前(AOT)编译的能力。
什么是CrossGen?
我们日常开发时使用C#编译器CSC编译一个.NET程序集,程序集包含MSIL代码(中间语言代码)。当应用程序运行时,目标环境的本地JIT编译器将MSIL代码转换为本机代码,然后CPU才能执行它们。
但是这种JIT编译到导致应用程序启动很慢,因为JIT编译器必须花时间翻译代码。
为了实现更快地启动应用程序,CoreCLR包含了一个名为CrossGen的工具,它可以将MSIL代码预编译成本机代码。
其实最早可以追溯到.NET ngen技术,Ngen.exe (Native Image Generator)
然后,.NET 6设计引入Crossgen2有两大目标:
- 提高crossgen开发的效率
- 并实现crossgen目前无法实现的一系列功能。
这种转换有点类似于本机代码csc.exe升级演进为基于Roslyn的托管代码编译器。这种过程。
Crossgen2是用C#编写的,但是它没有像Roslyn那样公开一个功能全面的API,可以编程灵活使用。
接下来简单了解一下关于Crossgen2的几个主要问题:
一、Crossgen2的用途是什么,什么时候应该使用它
Crossgen 是一个为代码提供提前 (AOT) 编译的工具,从而减少了运行时对 JIT的性能消耗。
发布应用程序时,Crossgen 对所有程序集运行 JIT,并将 JIT 代码存储在一个额外的部分中,该部分可以在运行时快速获取。
Crossgen 应该用在快速启动的应用场景中。
二、Crossgen2跨平台编译原理是什么?
Crossgen2支持跨操作系统和体系结构的交叉编译能力。未来使用一台构建服务器就可以为所有目标环境生成本机代码Native Code,直接运行,提升第一次访问的性能和速度。
内部实现上,在Arm64上,Crossgen2可以使用编译为Arm64的x64 RyuJIT生成x64代码。类似的方式还有x64架构下生产x64代码。Crossgen2加载为该配置构建的RyuJIT。
三、用 C# 编写 Crossgen 的主要优点和缺点是什么
用 C# 编写,可以访问一组丰富的 .NET API 以及使用托管语言提供的内存安全保证。
使用 C# 的一个缺点是同时在许多小型程序集上使用 Crossgen2 时会增加处理时间,因为多次启动运行时会产生开销。幸运的是可以通过在自身上运行 Crossgen2 来缓解大部分问题!
四、Crossgen2的设计过程
Crossgen2 也不是简单的托管重写。该架构使用图表来驱动分析和编译。这允许扫描器、优化器、分析器处理、分析、表示正在编译的程序集。这个项目已经进行了 2 年——Crossgen2 编译器的起源始于 2016 年左右的一个研究项目。
展望未来,crossgen2 将给我们提供更多选择,为平台和代码做出更高性能的选择。让我们持续关注。
周国庆
2022/3/28
关于.NET 6.0 Crossgen2的一些研究的更多相关文章
- 基于WS-BPEL2.0的服务组合研究
http://tech.it168.com/soadocument/2008-01-03/200801031332376.shtml WS-BPEL是为组合Web服务而制定的一项规范.它的前身是由IB ...
- 不修改加密文件名的勒索软件TeslaCrypt 4.0
不修改加密文件名的勒索软件TeslaCrypt 4.0 安天安全研究与应急处理中心(Antiy CERT)近期发现勒索软件TeslaCrypt的最新变种TeslaCrypt 4.0,它具有多种特性,例 ...
- YUV 4:2:0 格式和YUV411格式区别
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/coloriy/article/details/6668447 MPEG 储存的 YU(Cb)V(Cr ...
- HTTP 2.0 原理详细分析
HTTP 2.0是在SPDY(An experimental protocol for a faster web, The Chromium Projects)基础上形成的下一代互联网通信协议.HTT ...
- 官宣,PyTorch 1.0 稳定版本现已推出
简评:快来一起快乐地学习吧. 随着 PyTorch 生态系统和社区继续为开发人员提供有趣的新项目和教育资源,今天(12 月 7日)在 NeurIPS 会议上发布了 PyTorch 1.0 稳定版.研究 ...
- Spark2.0 协同过滤推荐
ALS矩阵分解 http://blog.csdn.net/oucpowerman/article/details/49847979 http://www.open-open.com/lib/view/ ...
- vue-cli 3.0安装和使用
零. 前言 公司最近开发项目使用的是vue-cli 3.0版本开发,但是对于vue-cli 3.0版本一直没有研究过如何使用,公司使用配置:pug + ts + stylus + eslint:编辑器 ...
- OAuth2.0授权登录
最近工作中遇到了多系统间的授权登录,对OAuth2.0进行了学习研究,并总结备忘. [场景] 我们登录一些论坛等网站的时候,如果不想单独注册该网站账号,可以选择用微信或QQ账号进行授权登录. 这样的第 ...
- Spark2.0协同过滤与ALS算法介绍
ALS矩阵分解 一个 的打分矩阵 A 可以用两个小矩阵和的乘积来近似,描述一个人的喜好经常是在一个抽象的低维空间上进行的,并不需要把其喜欢的事物一一列出.再抽象一些,把人们的喜好和电影的特征都投到这个 ...
随机推荐
- 开源GenICam项目上手-1
GenICam 说明 一个统一的编程规则,这样我们只需要一个应用软件,就可以支持符合标准的不同型号相机,当我们升级相机.更换相机时,不需要编写不同的软件代码. The goal of GenICamT ...
- The POM for com.alibaba:druid:jar:1.2.6 is invalid, transitive dependencies (if any) will not be available
开发环境 IDEA2020.3, jdk1.8.0_231 问题描述 开发中引入了druid-spring-boot-starter最新版本1.2.6,项目install时的时候一直出现警告 The ...
- 记录一次dns劫持及其解决办法
发现问题 偶然发现家里的私人云盘不能用了,最开始以为是云盘出现了问题,各种修复重启后发现云盘并没有问题.然后又发现电脑无法使用浏览器访问网页(或者加载异常缓慢),但是各种软件又可以正常使用,win+R ...
- HDFS免重启挂载新磁盘
背景 在生产环境中,集群节点磁盘大小不同,其使用率也会不同,HDFS虽有均衡策略,但也会有数据不平衡的情况,有些节点磁盘就会被打满,然后这个节点就不健康了(Unhealthy Nodes),Yarn的 ...
- demo_2_27
#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <string.h> int count_bit_one ...
- [题解]第十一届北航程序设计竞赛预赛——I.神奇宝贝大师
题目描述 一张n*m的地图,每个格子里面有一定数量的神奇宝贝,求一个最优位置,使得所有神奇宝贝到该位置的曼哈顿距离最小. 一共有T组数据,每组数据包含两行,第一行是n和m(1<=n,m<= ...
- 带你玩转CompletableFuture异步编程
前言 最近在忙生活的第一个OKR,这个等等后面具体聊聊,今天开始恢复每周一篇原创,感谢小伙伴的不离不弃.这篇文章也是最近在Code Review的时候,看到的大家代码,想整体推下大家异步编程的思想,由 ...
- BI可视化在线分析工具,推荐这2个BI工具!
一.国外BI----tableau BI平台Tableau帮助企业可视化和理解数据.它使组织能够通过PC或iPad连接,可视化和共享数据.用户可以轻松创建仪表板,发布甚至与同事,合作伙伴和客户共 ...
- Weblogic补丁升级常见问题
转至:https://blog.csdn.net/weixin_44659716/article/details/106804177 常用企业级版本:Weblogic 11g(weblogic10.3 ...
- 微服务从代码到k8s部署应有尽有系列(十三、服务监控)
我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...