.NET体系结构

主要内容包括:算法

C#与.NET的关系、公共语言运行库、中间语言、程序集、.NET Framework类、名称空间、内层管理...数据库

C#与.NET的关系

C#是门高级编程语言,.NET(Framework)是个环境,用C#编写的全部代码老是在.NET Framework中运行。编程

CLR公共语言运行库

 它是.NET Framework的核心,在CLR控制下运行的代码称为托管代码。CLR执行编写好的源代码以前,须要编译它。windows

编译分两个阶段:设计模式

1)将源代码编译为Microsoft中间语言(IL)安全

2)CLR把IL编译为平台专用代码。网络

这种设计的重要优势:编程语言

1)平台无关性,依托的是:CTS是通用类型系统,CLS是通用语言规范,函数

2)提升性能性能

3)语言的互操做性,COM、windows运行库

中间语言

应用程序域

就是为安全性,可靠性,隔离性,和版本控制,及卸载程序提供的隔离边界。它一般由运行库宿主建立,应用程序域提供了一个更安全,用途更广的处理单元。

程序集

程序集是.NET时代的动态连接库DLL,程序集是包含编译好的、面向.NET Framework的代码的逻辑单元。

程序集包括(中间语言(IL),元数据(metaData),资源(resource),装配清单(AL))。

它包含的元数据(描述自身的数据)描述了对应代码中定义的类型和方法。

能够编程访问这些元数据,这个技术称为“反射”。抽象工厂设计模式中有用到:

static string AssemblyName = Assembly.GetExecutingAssembly().GetName().Name; //获取程序集名称
string className = AssemblyName+".Models" + "." + db + "User";   //命名空间.类名称
(IUser)Assembly.Load(AssemblyName).CreateInstance(className);    //获取IUser程序集

可执行代码和库代码,使用相同的程序集结构,他们的区别是:

可执行代码的程序集包含一个主程序的入口点,而库程序集不包含。

.NET Framework类

属于托管类,使用托管代码的好处是可使用.NET基类库,很是多的类的集合。大部分.net基类库是用C#写的。

名称(命名)空间

是.NET避免类名冲突的一种方式。

Microsoft建议都至少要提供两个嵌套的命名空间名,第一个是公司名,第二个是技术名称或者软件包的名称,再以后是类名。

内存管理

一、GC(Garbage collector)

GC是垃圾收集器。CLR经过GC实现的自动内存管理。

1)什么被认为是可回收的对象?
GC采用必定的算法遍历全部的对象,找出可达对象和不可达对象,不可达对象是可回收的对象。
2)何时回收?
一般状况下:内存不足溢出时,确切的说,是第一代对象已满的时候。
3)如何回收?
垃圾收集进程来释放不可达对象的内存空间。
4)回收完后,还须要作什么?
避免托管堆上的内存碎片,从新分配内存,压缩托管堆。
5)避免垃圾回收带来的性能影响,采用代龄机制。

如要请求垃圾收集,能够调用下面的方法之一: 
System.gc()
Runtime.getRuntime().gc()

二、托管资源vs非托管资源

资源就是程序中可利用的数据,譬如:字符串、图片和任何二进制数据,包括任何类型的文件。

托管资源是由CLR全权负责的资源,CLR不负责的资源位非托管资源。
对于托管资源经过GC自动清理回收。对于非托管资源,经过代码调用手动进行清除,再由GC回收
如何正确的释放资源:对于非托管的资源,通常就是,Stream(流),数据库的链接,网络链接等的这些操做系统资源,须要咱们手动去释放。

Net提供了三种释放方法:Dispose,Close,析构函数(也就是Finalize方法)

相关文章
相关标签/搜索