重新把c#编程技术过一遍1(.net体系结构)
时间:2010-12-13 来源:肉丝
.net framwork 的核心是其运行库的执行环境,称为公共语言运行库(CLR)或.NET运行库。通常将在CLR的控制下运行的代码称为托管代码。但是,在CLR执行开发的源代码之前,需要编译他们,在.NET中编译分为两个阶段:
1.把源代码编译为中间语言
2.CLR把IL编译为平台专用的代码
中间语言:
主要特征:
● 面向对象和使用接口, 带有类的单一继承性。
● 值类型和引用类型之间的巨大差别
● 强数据类型
● 使用异常来处理错误
● 使用特性(attribute)
目前已经使用了三种技术来释放进程向系统动态请求的内存:
● 完全以手工的方式使应用程序代码完成这些工作
让应用程序代码负责释放内存,是低级但高性能的语言使用技术,例如:C++。这种技术很有效,且可以让资源在不需要的时候就释放,但其最大的缺点是频繁出现错误。请求内存的代码还必须明确通知系统它什么时候不再需要内存。但这是很容易被遗漏的,从而导致内存泄露。
● 让对象维护引用计数
维护引用计数是COM对象采用的一种技术,其方法是每个COM组件都保留一个计数,记录客户机目前对它的引用数。当这个计数下降到0时,组件就会删除自己,并释放相应的内存和资源。它带来的问题仍需要客户机通知组件他们已经完成了内存的使用。只要有一个客户机没有这么做,对象就仍驻留在内存中。在某些方面,这是比C++内存泄露更为严重的问题,因为COM 对象可能存在于它自己的内存中,从来不会被系统删除(在C++内存泄露问题上,系统至少可以在进程中断时释放所有内存)
● 垃圾收集器(.NET运行库所采用的)
.NET运行库采用的方法是垃圾收集器,这是一个程序,其目的是清理内存,方法是所有动态请求的内存都分配到一个堆上,当.NET检测到给定进程托管堆已满,需要清理时,就调用垃圾收集器。垃圾收集器处理目前代码中的所有变量,检查对存储在托管堆上的对象的引用,确定哪些对象可以从代码中访问--即哪些对象有引用。没有引用的对象就不能再从代码中访问,因而被删除。垃圾收集器机制不能和诸如非托管C++这样的语言一起使用,因为C++允许指针自由的转换数据类型。