CLR(Common Language Runtime)普通语言运行时是整个.net framework构建的基础,是实现.Net跨平台,跨语言,代码安全等核心特性的关键。
CLR和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离。
为了提高平台的可靠性,以及为了达到面向事务的电子商务应用所要求的稳定性级别,CLR还要负责其他一些任务,比如监视程序的运行。按照.NET的说法,在CLR监视之下运行的程序属于“受管理的”(managed)代码,而不在CLR之下、直接在裸机上运行的应用或者组件属于“非受管理的”(unmanaged)的代码。
为了提高平台的可靠性,以及为了达到面向事务的电子商务应用所要求的稳定性级别,CLR还要负责其他一些任务,比如监视程序的运行。按照.NET的说法,在CLR监视之下运行的程序属于“受管理的”(managed)代码,而不在CLR之下、直接在裸机上运行的应用或者组件属于“非受管理的”(unmanaged)的代码。
CLR将监视形形色色的常见编程错误,许多年来这些错误一直是软件故障的主要根源,其中包括:访问数组元素越界,访问未分配的内存空间,由于数据体积过大而导致的内存溢出,等等。
然而,这种对受管理代码的运行监视是有代价的。虽然当前还不可能精确地得到监视程序运行所需要的开销,但从当前Beta测试版的性能表现来看,正如Microsoft所承认的那样,我们可以预料由它导致的性能降低程度至少达到10%。当然,如果监视程序运行能够将稳定性和可用性提高到一个新的档次,我们可以怀疑10%的性能降低是否还可以称为一件坏事……
在处理器性能改善方面,摩尔定律已经一再被证明是正确的。既然如此,我们要得到一台性能增加了10%的服务器要等待多长时间呢?
然而,这种对受管理代码的运行监视是有代价的。虽然当前还不可能精确地得到监视程序运行所需要的开销,但从当前Beta测试版的性能表现来看,正如Microsoft所承认的那样,我们可以预料由它导致的性能降低程度至少达到10%。当然,如果监视程序运行能够将稳定性和可用性提高到一个新的档次,我们可以怀疑10%的性能降低是否还可以称为一件坏事……
在处理器性能改善方面,摩尔定律已经一再被证明是正确的。既然如此,我们要得到一台性能增加了10%的服务器要等待多长时间呢?
老师的讲解:
公共语言运行库是.net framework的基础。它运行代码并提供使开发过程更轻松的服务。
托管代码:以公共语言运行库为目标的代码称为托管代码。(以.net为基础)
clr功能:
1.管理内存2。线程执行。。。。。。
托管执行过程:选择编译器。把代码编译为中间语言(msil)。将msil编译为本机代码。运行代码。
microsoft中间语言(msil)
一组可以有效的转换为本机代码且独立于cpu的指令。
当编译为托管代码时,编译器将源代码翻译为microsoft中间语言(msil)。
运行时,实时(jit)编译器现将msil转换为特定与cpu的代码。
元数据(描述程序中有哪些类,入口点在?)
元数据是一种二进制信息,用以对存储在公共语言运行库可移植可执行文件(pe)文件或存储在内存中的程序进行描述。
在模块获程序集中定和饮用的么各类型和成员都将在元数据中进行说明。
当执行代码时,运行库将元数据加载到内存中,并引用他来发现有关代码的类,成员,继承等信息。
托管模块
需要clr才能运行的标准windows可执行文件(pe)文件。
包括PE表头,元数据,中间语言等
自动内存管理(了解)
访问资源的步骤:
1。为表示某个特定资源的类型分配一定内存空间。
2。初始化分配好的内存空间。
3。使用资源。
4。销毁资源状态。
5。。。。。。。
垃圾回收机制(GC)
简化内存管理,自动收集。
功能:分配内存,释放内存,级别和性能,为非托管资源(不纳入CLR)释放内存(需要显式清除)
程序集(assembly)重要
程序集是.NET.Framework应用程序的构造块(exe,dll......)
程序集是为协同工作而生成的类型和资源的集合。
程序集可以使静态的或动态的。
静态存储在磁盘上的可移植可执行文件中
动态程序集直接从内存运行并且在执行前不存储到磁盘上。
程序集功能:
包含代码
形成安全边界
形成类型边界
形成引用范围边界
形成程序集版本边界(是.net独有的)
形成部署单元
是支持并行执行的单元
静态程序集
程序集清单,包含程序集元数据
类型元数据
。
。
。
单程序集
多文件程序集
两种程序集
弱命名程序集,没有进行签名,任何人都可以用
强命名程序集,有一个公钥/私钥对签名
应用程序域(很少使用)
用途:应用程序需要隔离代码或使用并卸载dll