CLR运行库。
CLR是供.NET应用程序使用的运行时环境。在.NET应用程序和底层操作系统之间提供操作层。
CLR指定规则保证.NET应用程序的互操作性,别成为公共语言规范CLS,CLI.
CLS(Common Language Specification) 限制了命名约定、数据类型、函数类型以及某些其他元素,为不同语言提供了公共标准。知识确保互操作性,并非强制条件。
CLR环境下,.NET应用程序的抽象中间包括两个主要组件:元数据和托管代码。
元数据:是应用程序的所有结构项(类、类的成员和特性、全局项等)
托管代码:表示了应用程序的方法(函数)的功能,他们以微软中间语言(MSIL)或公共中间语言CLI的抽象二进制形式进行编码。
IL代码由CLR"托管"。CLR脱光包括三个主要活动:类型控制、结构化异常处理和垃圾收集。
类型控制涉及在执行期间项类型的验证和转换。
托管异常处理在功能上与非托管结构化遗产给处理类似,但它是由CLR执行的而不是由系统执行的。
垃圾收集涉及对不在使用的对象进行自动表示和释放。
CLR处理元数据和IL代码主要子系统是加载程序(loader)和JIT(just-in-time,即时)编译器。
加载程序读取元数据,并在内存中创建类及其成员的内部表示和布局。它是按需执行这项任务,也就是说一个类只有在被引用的时候才会被加载和布局。没有引用的类就不会被加载。在加载类的时候,加载程序会对相关元数据进行一系列的一致性检查。
JIT编译器根据加载程序的行为结果,将使用IL编码的方法编译为底层平台的本地代码,因为CLR不是解释器,所以它不执行任何IL代码,而IL代码在内存中被编译为本地代码,并且这些本地代码会被执行,JIT编译器也是按需进行处理的,这意味着方法只有在被调用的时候才会被编译,已编译的方法会在内存中缓存。然而,如果内存有限,那些方法不在使用时就会被销毁,如果方法在销毁后被再次调用那么该方法被重新编译。
创建和执行托管.NET应用程序的顺序。