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的一些研究的更多相关文章

  1. 基于WS-BPEL2.0的服务组合研究

    http://tech.it168.com/soadocument/2008-01-03/200801031332376.shtml WS-BPEL是为组合Web服务而制定的一项规范.它的前身是由IB ...

  2. 不修改加密文件名的勒索软件TeslaCrypt 4.0

    不修改加密文件名的勒索软件TeslaCrypt 4.0 安天安全研究与应急处理中心(Antiy CERT)近期发现勒索软件TeslaCrypt的最新变种TeslaCrypt 4.0,它具有多种特性,例 ...

  3. YUV 4:2:0 格式和YUV411格式区别

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/coloriy/article/details/6668447 MPEG 储存的 YU(Cb)V(Cr ...

  4. HTTP 2.0 原理详细分析

    HTTP 2.0是在SPDY(An experimental protocol for a faster web, The Chromium Projects)基础上形成的下一代互联网通信协议.HTT ...

  5. 官宣,PyTorch 1.0 稳定版本现已推出

    简评:快来一起快乐地学习吧. 随着 PyTorch 生态系统和社区继续为开发人员提供有趣的新项目和教育资源,今天(12 月 7日)在 NeurIPS 会议上发布了 PyTorch 1.0 稳定版.研究 ...

  6. Spark2.0 协同过滤推荐

    ALS矩阵分解 http://blog.csdn.net/oucpowerman/article/details/49847979 http://www.open-open.com/lib/view/ ...

  7. vue-cli 3.0安装和使用

    零. 前言 公司最近开发项目使用的是vue-cli 3.0版本开发,但是对于vue-cli 3.0版本一直没有研究过如何使用,公司使用配置:pug + ts + stylus + eslint:编辑器 ...

  8. OAuth2.0授权登录

    最近工作中遇到了多系统间的授权登录,对OAuth2.0进行了学习研究,并总结备忘. [场景] 我们登录一些论坛等网站的时候,如果不想单独注册该网站账号,可以选择用微信或QQ账号进行授权登录. 这样的第 ...

  9. Spark2.0协同过滤与ALS算法介绍

    ALS矩阵分解 一个 的打分矩阵 A 可以用两个小矩阵和的乘积来近似,描述一个人的喜好经常是在一个抽象的低维空间上进行的,并不需要把其喜欢的事物一一列出.再抽象一些,把人们的喜好和电影的特征都投到这个 ...

随机推荐

  1. AI 神经网络学习

    神经网络学习 1.输出与输入的关系(感知基): $$ y=\begin{Bmatrix} 1 & {\overrightarrow{x}\cdot \overrightarrow{w}+b&g ...

  2. ASP.NET Core 6框架揭秘实例演示[06]:依赖注入框架设计细节

    由于依赖注入具有举足轻重的作用,所以<ASP.NET Core 6框架揭秘>的绝大部分章节都会涉及这一主题.本书第3章对.NET原生的依赖注入框架的设计和实现进行了系统的介绍,其中设计一些 ...

  3. Eureka工作原理及心跳机制

    Eureka原理 1.基本原理上图是来自eureka的官方架构图,这是基于集群配置的eureka:处于不同节点的eureka通过Replicate进行数据同步Application Service为服 ...

  4. 非对称加解密 Asymmetric encryption 对称加密和非对称加密的区别

    考虑这样一个问题:一切的装备文件都存储在 Git 长途库房,RAR密码破解装备文件中的一些信息又是比较灵敏的.所以,我们需求对这些灵敏信息进行加密处理.首要的加密方法分为两种:一种是同享密钥加 密(对 ...

  5. python.36的特性新定义初学者必看课程

    一.Python3.6新特性 1.新的格局化字符串办法 <p "="">新的格局化字符串办法,即在一般字符串前增加 f 或 F 前缀,其效果相似于str.fo ...

  6. Spring cloud是什么? 核心总结

    Spring Cloud 是一套完整的微服务解决方案,基于 Spring Boot 框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量. S ...

  7. 2020年最为典型的BI工具有哪些?

    现在可视化BI 可以帮助充分利用企业在日常运营中积累的大量数据,帮助企业做出理性的决策,降低风险,减少损失.以下五款我认为是2020年最为典型的BI工具: (1)Tableau Tableau是国外市 ...

  8. windows 应用商店常用软件

    QuickLook 这个应用可以让你,用空格键查看几乎任何文件的信息. 例如快速查看图片,播放视频,阅读 PDF 等等,支持的格式多到吓人.  Python 没错,就是那个非常火的编程语言,Pytho ...

  9. linux中()、[]、{}、(())、[[]]等各种括号的使用

    转至:https://www.jianshu.com/p/b88c7e07aaa9 linux中().[].{}.(()).[[]]等各种括号的使用 1.小括号.圆括号() 1.1 单小括号() 命令 ...

  10. 前端vue下载文件时blob返回流中怎么获取文件名

    我很久之前写了一篇前端vue利用blob对象下载文件,有些人私信我,如果后端返回流失败,给出的json对象该怎么获得?前端获取的流怎么能获取原文件名?其实在那篇文章之后,我就已经针对这两个问题进行了优 ...