第一次执行方法
1、 CLR检测方法中的引用类型,并生成一个内部数据结构,用于管理对引用类型的访问。在这个内部数据结构中,引用类型的每一个方法实现都有一条对应的记录,每条记录容纳了一个地址。对这个结构进行初始化的时候,CLR将每条记录都设置成CLR内部包含的一个未文档化的函数。这个函数被称为:JITCompiler。被调用的JITCompiler函数负责将一个方法的IL代码编译成本地的CPU指令。
2、 JITCompiler函数被调用时,它知道要调用那个方法,以及具体是什么类型定义了该方法。然后,JITCompiler会再定义程序集的元数据中搜索被调用方法的IL。JITCompiler验证IL代码,并将IL代码编译成本地CPU指令。本地CPU指令保存在一个动态分配的内存块中。然后JITCompiler回到CLR为类型创建的内部数据结构,找到与被调用的方法对应的那一条记录,然后将最初调用它的那个引用替换成内存块的地址。最后JITCompiler函数会跳到内存块中的代码,也就是被调用函数的具体实现。代码返回后继续执行原来的函数。
3、 当第二次调用此方法时会直接执行内存块中的代码,完全跳过JITCompiler函数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构