代码之家  ›  专栏  ›  技术社区  ›  Fakrudeen

启动时依赖于CLR的程序集解析

  •  4
  • Fakrudeen  · 技术社区  · 15 年前

    当程序启动时,CLR是否尝试解析[不一定加载]所有依赖程序集? 也就是说,从属程序集决议是否按需完成?

    3 回复  |  直到 15 年前
        1
  •  4
  •   Hans Passant    15 年前

    JIT编译器负责引导程序集的加载,以响应将IL转换为机器代码。类型方法调用首先转换为调用存根函数。调用时,此存根激活JIT编译器以加载IL(必要时加载程序集)并对其进行转换。非常随需应变。

    此过程中的一个问题是通过Ngen.exe运行的程序集,所有.NET framework程序集在安装到计算机上时都是通过Ngen.exe运行的。这在首次加载程序集时检测到。然后JIT编译器跳过翻译步骤,按原样使用预翻译的机器代码。虽然这将加载程序集生成的所有机器代码,但它仍然是按需加载的。术语“加载”在这里是相对的,Windows使用内存映射文件将本机映像映射到虚拟内存空间。在代码执行到达尚未映射到RAM的内存页之前,不会从文件中读取实际字节。这方面的技术术语是“页面错误”,它在Taskmgr.exe中可见。

        2
  •  3
  •   Jehof    15 年前

    当需要在程序集中定义的类型时,将解析从属程序集。因此,程序集是按需加载的。

        3
  •  3
  •   Tim Cooper    13 年前

    从…起 here

    CLR加载程序加载并初始化 尽可能少地逃脱惩罚。 加载器不解析和 自动加载下属 只有当他们真的是 延迟加载功能)。这不仅 但也减少了 正在运行的服务器消耗的资源