c# – 什么时候提前编译(AOT)?

前端之家收集整理的这篇文章主要介绍了c# – 什么时候提前编译(AOT)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用C#.NET作为Web应用程序.我已经读过JIT编译发生在运行时,这意味着(纠正我,如果我错了)编译将在请求到达IIS时发生.

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

如果没有JIT并且我们想要使用AOT,AOT在哪里适合所有这些?

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

解决方法

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

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

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

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

此外,Ahead-Of-Time和Just-In-Time编译器中的时间指的是运行时.因此,在Ahead-Of-Time编译器中,编译在程序运行之前发生,通常作为构建步骤添加.在Just-In-Time编译器中,编译在程序运行时不断发生.

为了将它放在C#.NET透视图中并回答我的问题,CIL由MSBuild使用csc.exe生成,而不考虑CLR是否使用JIT或AOT编译器.在运行程序时,JIT或AOT编译器开始运行.在程序运行之前,AOT编译器将整个程序集(在CIL或语言X中)编译为本机机器代码(语言Y).当调用方法时,JIT编译器将各个方法和类(在CIL或语言X中)编译为本机机器代码(语言Y).

CLR默认提供JIT编译器,但它也支持使用Native Image Generator(Ngen.exe)进行AOT编译.

原文链接:/csharp/97430.html

猜你在找的C#相关文章