关于.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 可以用两个小矩阵和的乘积来近似,描述一个人的喜好经常是在一个抽象的低维空间上进行的,并不需要把其喜欢的事物一一列出.再抽象一些,把人们的喜好和电影的特征都投到这个 ...
随机推荐
- AI 神经网络学习
神经网络学习 1.输出与输入的关系(感知基): $$ y=\begin{Bmatrix} 1 & {\overrightarrow{x}\cdot \overrightarrow{w}+b&g ...
- ASP.NET Core 6框架揭秘实例演示[06]:依赖注入框架设计细节
由于依赖注入具有举足轻重的作用,所以<ASP.NET Core 6框架揭秘>的绝大部分章节都会涉及这一主题.本书第3章对.NET原生的依赖注入框架的设计和实现进行了系统的介绍,其中设计一些 ...
- Eureka工作原理及心跳机制
Eureka原理 1.基本原理上图是来自eureka的官方架构图,这是基于集群配置的eureka:处于不同节点的eureka通过Replicate进行数据同步Application Service为服 ...
- 非对称加解密 Asymmetric encryption 对称加密和非对称加密的区别
考虑这样一个问题:一切的装备文件都存储在 Git 长途库房,RAR密码破解装备文件中的一些信息又是比较灵敏的.所以,我们需求对这些灵敏信息进行加密处理.首要的加密方法分为两种:一种是同享密钥加 密(对 ...
- python.36的特性新定义初学者必看课程
一.Python3.6新特性 1.新的格局化字符串办法 <p "="">新的格局化字符串办法,即在一般字符串前增加 f 或 F 前缀,其效果相似于str.fo ...
- Spring cloud是什么? 核心总结
Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量. S ...
- 2020年最为典型的BI工具有哪些?
现在可视化BI 可以帮助充分利用企业在日常运营中积累的大量数据,帮助企业做出理性的决策,降低风险,减少损失.以下五款我认为是2020年最为典型的BI工具: (1)Tableau Tableau是国外市 ...
- windows 应用商店常用软件
QuickLook 这个应用可以让你,用空格键查看几乎任何文件的信息. 例如快速查看图片,播放视频,阅读 PDF 等等,支持的格式多到吓人. Python 没错,就是那个非常火的编程语言,Pytho ...
- linux中()、[]、{}、(())、[[]]等各种括号的使用
转至:https://www.jianshu.com/p/b88c7e07aaa9 linux中().[].{}.(()).[[]]等各种括号的使用 1.小括号.圆括号() 1.1 单小括号() 命令 ...
- 前端vue下载文件时blob返回流中怎么获取文件名
我很久之前写了一篇前端vue利用blob对象下载文件,有些人私信我,如果后端返回流失败,给出的json对象该怎么获得?前端获取的流怎么能获取原文件名?其实在那篇文章之后,我就已经针对这两个问题进行了优 ...