首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么时候进行提前(AOT)编译?

什么时候进行提前(AOT)编译?
EN

Stack Overflow用户
提问于 2015-09-18 22:00:27
回答 1查看 15K关注 0票数 27

我正在使用C#.NET开发一个web应用程序。我读到过JIT编译发生在运行时,这意味着(如果我错了,请纠正我)编译将在请求命中IIS时发生。

另一种编译是在解决方案的构建阶段使用csc.exe进行的,使用MSBuild将高级代码转换为CIL。

如果没有JIT,而我们想要使用AOT,那么AOT在这一切中的位置在哪里呢?

我的问题是,在从构建代码到第一次请求的整个阶段中,AOT编译发生在什么时候?(平台/框架无关紧要)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-19 02:02:24

经过大量的Googling搜索和研究,我发现我对编译器的基本理解是错误的。

编译器是将language X中的程序转换为language Y中的程序的程序。language Y可以是任何东西(本机代码、中间代码/字节码、某种其他语言Z或相同的语言本身)。

编译器不一定是将X语言的程序转换为m代码的程序。

例如,使用编译器csc.exe进行从高级C#代码到CIL的编译。(我怎么会错过呢?(啊!)

此外,预编译器和即时编译器中的time指的是运行时。因此,在预编译器中,编译是在程序运行之前进行的,通常作为构建步骤添加。而在实时编译器中,当程序正在运行时,编译一直在进行。

从C#.NET的角度来看,并回答我的问题,CIL是由MSBuild使用csc.exe生成的,而不需要考虑它使用的是即时编译器还是C#.NET编译器。正是在程序运行时,JIT或AOT编译器开始起作用。在程序运行之前,AOT编译器将整个程序集(在CIL或language X中)编译成本机代码(language Y)。调用方法时,JIT编译器将单个方法和类(在CIL或language X中)编译为本机代码(language Y)。

默认情况下,CLR提供了JIT编译器,但它也支持使用Native Image Generator(Ngen.exe)的AOT编译。

票数 53
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32653951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档