寂寞的风永不搁浅

学习之初 多为转载 未名出处 敬请见谅 点滴积累 必有作为

博客园 首页 新随笔 联系 订阅 管理


1. .NET Framework简介
.NET Framework为开发应用程序而创建的一个富有革命性的平台。.NET Framework可以创建Windows应用程序、Web应用程序、Web服务和其他各种类型的应用程序。.NET Framework的内容。.NET Framework是一种底层框架,包括开发人员编写、生成、测试、部署.NET Framework应用程序时所需要的一切类,其目的是便于开发商编写网络应用程序和Web服务程序,关键特色是提供了一个多语言组件的开发和执行环境。
.NET Framework主要包含一个非常大的代码库,这个库分为不同的模块,这样就可以根据希望得到的结果选择使用其中的各个部分。其目的是不同的操作系统可以根据自己的特性支持其中的部分或全部模块。
.NET Framework类库是可以重复使用的类的集合,从地位上讲,.NET Framework简介是所有开发语言的“操作系统”,是一种基础。


2. 框架的组织结构
.NET Framework简介主要包括公共语言运行时(Common Langue Runtime,CLR)、类库、程序集。
 公共语言运行时
公共语言运行时是一个执行并管理代码的引擎,其在执行代码是实时编译。在代码执行过程中CLR提供内存管理的垃圾回收、增强的安全、与受控代码的互操作性。
 类库
类库是框架中可重用的类的集合,包括类型安全、等级安全、内部信任机制等
 程序集
在编译应用程序时,所创建的MSIL代码存储在一个程序集中,程序集包括可执行的应用程序文件(这些文件可以直接在Windows上运行,不需要其他程序,其扩展名是.exe)和其他应用程序使用的库(其扩展名是.dll)。程序集是包含编译好的、面向.NET Framework的代码逻辑单元。程序集完全是自我描述性的,可以存储在多个文件中。程序集的一个重要特性是他们包含的数据描述了对应代码中定义的类型和方法,程序集也包含描述程序集本身的元数据,这种程序集元数据包含在一个成为“程序集清单”的区域中可以检查程序集的版本及其完整性。程序集包含程序的元数据表示调用给定程序集中的代码的应用程序或其他程序集不需要指定注册表或其他数据源。所有的元数据都与程序的可执行命令存储在一起。包含程序集入口的文件也存储了其他文件的细节、散列、内容。
除了包含MSIL外,程序集还包含元信息(即程序集中包含的数据的信息,也成为元数据)和可选的资源(MSIL使用的其他数据,例如声音文件和图片)。元信息允许程序集是完全自我描述的.不需要其他信息就可以使用程序集.因此部署应用程序就非常简单了,只需要把文件复制到远程计算机上的目录下即可.因为不需要目标系统上的其他信息,只需要从该目录中运行可执行文件即可(假定安装了.NETCLR).
当然不必把运行应用程序所需要的所有信息都安装到一个地方,可以编写一些代码,执行多个应用程序所要求的任务,此时通常把这些代码放在所有应用程序都可以访问的地方.在.NET Framework中这个地方就是全局程序集高速缓存(Global Assembly Cache , GAC)把代码放在这个高速缓存中是很简单的,只需要把包含代码的程序集放在包含该高速程序缓存的目录下即可。


3. 使用.NET Framework编写应用程序
为了执行c#代码必须把它们转换为目标操作系统能够理解的语言,即本机代码,这种转换为编译代码,有编译器进行,在.NET Framework下这个过程分为两个阶段:
把源代码编译成MSIL
把MSIL编译为机器识别的汇编代码。
不管是那一种开发语言都要求现编译为框架可识别的中间语言,这就是CLR可以支持多语言开发的关键技术。


4. MSIL
在编译使用.NET Framework库的代码时,不是立即创建操作系统特定的本机代码,而是把代码编译为Microsoft中间语言(Microsoft Intermediate Language,MSIL)。这些代码不专用于任何一种操作系统。MSIL代码是独立于机器、操作系统、CPU的。MISL是低级语言,语法简单使用数字代码而不是文本代码,可以非常快的转换为内部机器代码。
中间语言的主要特征:
 面向对象和使用接口:单一继承性。
 相异值类型和引用类型:值类型变量保存其数据;引用类型变量仅保存地址,对应的数据可以在该地址中找到。
 强数据类型:所有变量都清晰地标记为属于某个特定数据类型,特别是中间语言一般不允许对模糊的数据类型执行任何操作。如果类派生自其他类或包含其他类的实例,它就需要直到其他类使用的所有数据类型。.NET提供的、依赖于类型安全的服务中可以获得以下好处:语言的互操作性、垃圾收集、安全性、应用程序域。
 特性的使用:通过该机制可以在源代码中定义自己的特性。这些用户定义的特性江河对应用数据类型或方法的数据放在一起,这对于文档说明书很有用。特性和反射技术一起使用以根据特性执行编程任务。


5. 通用类型系统
.NET Framework库定义了一些基本类型。类型是数据的一种表达方式,指定其中最基础的部分以便使用.NET Framework在各种语言之间进行交互操作,这个这称为通用类型系统(Common Type System,CTS)。语言互操作性中强数据类型由CTS解决。


6. 公共语言规范(Common Langue Specification,CLS)
公共语言规范CLS是和通用类型系统CTS一起确保语言的互操作性。CLS是一个最低标准,所有的面向.NET的编译器都必须支持它。


7. 垃圾回收
代码托管的一个重要功能是垃圾回收(Garbage Collection,GC)。这种.NET方法可以确保应用程序不再使用某些内存时这些内存会被完全释放。.NET运行库采用的方法是垃圾收集器。具体方法是所有动态请求的内存都分配到堆上(CLR维护它自己的托管堆),当需要清理时,就调用垃圾收集器。垃圾收集器处理当前代码中的所有变量,检查对存储在托管堆上的对象的引用,确定哪些对象可以冲代码中访问,即哪些对象有引用,没有引用的对象不能再从代码中访问,因而被删除。


8. 安全性
.NET很好地补足了Windows提供的安全机制,因为它提供的安全机制是基于代码的安全性,而Windows仅提供了基于角色的安全性。基于角色的安全性建立在运行进程的帐户的身份的基础上,换而言之,就是谁拥有谁运行。基于代码的安全性建立在代码实际执行的任务和代码的可信程度上


9. 应用程序域
应用程序域是.NET中的重要技术改进,它用于减少运行应用程序的系统开销,这些应用程序需要与其他程序分离开来,但仍需要彼此通信。孤立代码可以通过进程来实现。在运行一个新的应用程序时,它会在一个进程环境内运行,Windows通过地址空间把进程分隔开来,这样每个进程有4G的虚拟空间,Windows利用额外的间接方式把这些虚拟内存映射到物理内存或磁盘空间的一个特殊区域中,每个进程都会有不同的映射,虚拟地址空间映射的物理内存之间不能有重叠。一般情况下,任何进程都只能通过指定虚拟内存中的一个地址来访问内存,即进程不能直接访问物理内存,因此一个进程不能访问分配给另一个进程的内存,这样就可以却把任何执行出错的代码不会损害其地址空间以外的数据。
但五多进程常常一起工作,需要彼此通信,因为进程不能共享内存,就需要复杂的编组过程在进程之间复制数据,这对性能有很大影响。
应用程序域是分离组件的一种方式。它不会导致因在进程之间传送数据而产生的性能问题,方法是把任何一个进程分解到多个应用程序域中,每个应用程序域大致对应一个应用程序,执行的每个线程都运行在一个具体的应用程序域中。如果不同的可执行文件都运行在同一个进程空间只能够,显然他们就能轻松地共享数据,因为理论上他们可以直接访问彼此数据。CLR会检查每个正在运行的应用程序域代码,以确保这些代码不能偏离它自己的数据区域。如何告诉程序要做什么工作而有不真正运行它?中间语言拥有强大的类型安全功能。一般情况下除非明确不使用安全的特性,否则使用的数据类型可以确保内存不会被错误地访问。如果运行应用程序的确需要与运行在不同的应用程序域中的其他应用程序通信或共享数据必须调用.NET远程服务。

10. JIT
Just-In-Time把MSIL编译为专用于操作系统和目标机器结构的本机代码,这样操作系统才能执行应用程序。
11. 托管代码
在把代码编译为MSIL再用JIT编译器把它编译为本机代码后,CLR的任务还没有全部完成.有哪个.NET Framework编写的代码在执行(这个阶段通常成为运行时(runtime))时是托管的.即CLR管理着应用程序,其方式是管理内存、处理安全性、运行进行跨语言调试。
托管代码的优点
 平台无关性:包含字节代码指令的同一文件可以放在任意平台中,运行时编译过程的 最后阶段可以很溶解完成。编译为中间语言就可以获得平台无关性,目前只能比较好的支持windows平台。
 提高性能:MSIL是及时编译的。JIT编译器并不是把整个应用程序一次编译完,而是只编译它调用的那部分代码。代码编译过一次后得到的内部可执行代码就存储起来直到退出应用程序未知,这样在下次运行这部分代码时就不需要重新编译了。编译过程的最后一部分是在运行时JIT确切的直到程序运行在什么类型的处理器上,可以利用该处理器提供的任何特性或特定机器代码来优化最后的可制定代码。
 语言互操作性:能将任何一种语言编译为中间代码,编译好的代码可以与从其他语言编译过来的代码进行交互。

posted on 2008-12-09 01:39  景阳  阅读(523)  评论(2编辑  收藏  举报