当程序启动时,CLR 是否尝试解析[不一定加载]所有依赖程序集?也就是说,依赖的大会决议是按需完成的吗?请注意,我不是在谈论 Assembly.Load* [Reflective] 类型的负载。
JIT 编译器负责指导程序集的加载,以响应将 IL 转换为机器代码。类型方法调用首先被转换为调用存根函数。调用时,此存根会激活 JIT 编译器来加载 IL(必要时加载程序集)并对其进行翻译。非常按需。
此过程中的一个问题是通过 Ngen.exe 运行的程序集,所有 .NET 框架程序集都是安装在计算机上时的。这是在首次加载程序集时检测到的。然后,JIT 编译器会跳过翻译步骤并按原样使用预翻译的机器代码。虽然这将加载程序集生成的所有机器代码,但它仍然是按需的。这里的“加载”一词是相对的,Windows使用内存映射文件将本机映像映射到虚拟内存空间。在代码执行到达尚未映射到 RAM 的内存页面之前,不会从文件中读取实际字节。其技术术语是“页面错误”,它在 Taskmgr.exe 中可见。
归档时间: |
|
查看次数: |
620 次 |
最近记录: |