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编译. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- vb.net – SqlClient调用导致“正在SNINativeMethodWrapper
- ruby – 运行简单的watir脚本时出错:未初始化的常量Watir
- c#中的高速矩阵操作?
- ruby-on-rails – Paperclip PDF上传失败(在rails 3生产中,
- macos – meteor OSX错误:SQLITE_CANTOPEN:无法打开数据库
- 飞镖 – 使BoxDecoration图像褪色/透明
- 基于给定列中的常用值,在R中聚合相同data.frame的多行
- c# – 用于跨平台应用程序的CRC
- vue项目未加载完成前显示loading...
- Flutter – TabBarView内部的ListView丢失其滚动位置