通用类型系统(Common Type System,CTS):.Net Framework库定义的一些基本类型,如整型,使各种语言之间进行交互操作。
公共语言运行库(Common Language Runtime,CLR):负责管理用.Net库开发的所有应用程序的执行。
编译器在编译的过程中需要两个步骤:
一、编译器将代码变成为Microsoft中间语言(Microsoft Intermediate Language,MSIL),MSIL不专用于任何一种OS,也不专用于任何一种.Net开发语言。
二、由JIT(Just-In-Time,意思大概为等到需要时再编译)编译器,将MSIL编译为专用于OS和目标机器结构的本机代码。
目前有好几种JIT编译器,各种编译器都用于不同的结构,我们总能找到一个合适的编译器创建所需的本机代码。
程序集:所创建的MSIL代码存储在一个程序集中,程序集包括可执行的应用程序文件(.exe)和其他应用程序使用的库(.dll)。除了包含MSIL外,程序集还包含元信息(即程序集中包含的数据的信息,也称为元数据)和可选的资源(MSIL使用的其他数据,例如声音和图片文件)。这样部署就很方便了,不需要在客户端和注册表及其他一些东西打交道了,只需要COPY就OK了。
这里还涉及到一个概念就是链接,MSIL代码不一定都在一个文件中,可以把应用程序的代码放在多个包含源代码的文件中,再把它们编译到一个程序集中。这样做的原因是,处理几个小的文件比处理一个大的文件要简单得多。而在企业级开发中,这样还有一个好处,可以把一个大的功能分成各个小的功能,让多个程序员去完成。
通常把程序经常要用到的一些代码放在所以程序都可访问的地方,这个地方就是全局程序集高速缓存(Global Assembly Cache,GAC),而要把代码放在这个高速缓存中很简单,只需要把包含代码的程序集放在包含该高速缓存的目录下就可以了。
托管代码:在经过MSIL和JIT两个阶段后,CLR的任务还没有全部完成,用.Net Framwork编写的代码在执行(这个阶段通常称为运行时(runtime))时是托管的,此时CLR管理者应用程序,其方式是管理内存、处理安全性,以及允许进行跨语言调试等。C++可以编写非托管的代码,但C#只能编写在托管环境下运行的代码。我们将使用CLR的托管功能,让.Net自己与OS进行交互。
垃圾回收:托管代码很重要的一个功能是垃圾回收(garbage collection)。.Net垃圾回收会频繁检查计算机内存,但没有设置时间帧,可能一秒钟进行上千次检查,也有可能几秒钟才进行一次检查,或者随时进行检查,但可以肯定的是进行了检查。正因为检查的不可预知性,所以在设计一些需要大内存才能运行的应用程序时,建议程序员还是自己来执行这样的检查,自己处理垃圾回收。
以下是图解 创建.Net应用程序所需的步骤:
没有评论:
发表评论