.NET Framework
MSDN的解释:.NET Framework是为其运行的应用程序提供各种服务的托管执行环境。它包括两个主要组件:作为处理运行的应用程序的执行引擎的公共语言进行时(CLR);以及.NET Framework 类库,此类库童工开发人员可以从其自己的应用程序中调用的已测试的可重用代码库
CLR公共语言进行时
CLS公共语言规范
CTS通用类型系统
CLR的执行模型
Complication
Source Code→Language Complier→MSIL
Execution
Native Code ←JIT Complier
1、将源代码(vb、cs)编译成托管代码块。托管代码块由中间语言和元数据组成。
2、强托管代码合并成程序集,也叫组件(dll)。程序集中包含了一张叫做“清单”的模块,记录了构成程序集模块构成的信息包括资源文件及需要引用自己的信息。
3、加载公共语言运行库。
4、执行程序集的代码。
5、生成本地代码。
CLI
CLI ,公共语言基础架构(Common Language Infrastructure)
CLI是一个开放的技术规范。它是由微软联合惠普以及因特尔于2000年向ECMA倡议的。通用语言基础架构定义了构成.NET Framework 基础结构的可执行行码以及代码的运行时环境的规范,他定义了一个语言无关的跨体系结构的运行环境,这使得开发者可以用规范内定义的各种高级语言来开发软件,并且无需修正即可将软件运行在不同的计算机体系结构上。
BCL FCL
BCL ,基础类库(Base Class Library)
BCL是一个公共编程框架,所有语言的开发者都能利用它。是CLI的规范之一,主要包括:执行网络操作,执行I/O操作,安全管理,文本操作,数据库操作,XML操作,与实践日志交互,跟踪和一些诊断操作,使用费托管代码,创建与调用动态代码等,粒度相对较小,为所有框架提供基础支持。
FCL,框架类库(Framework Class Library)
FCL提供了大粒度的编程框架
托管代码与非托管代码
1、托管代码就是Cisual Basic .NET 和C#编译器编译出来的代码,托管代码在公共语言运行库(CLR)中运行
2、费托管代码是运行在公共语言运行库环境(CLR)的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务
区别:
1、非托管代码是一种中间语言,运行在CLR上;
非托管代码呗编译为机器码,运行在机器上。
2、托管代码独立于平台和语言,能更好的实现不同语言平台之间的兼容; 非托管代码依赖于平台和语言。
3、托管代码可享受CLR提供的服务(如安全检测、垃圾回收等),不需要自己完成这些操作;非托管代码需要自己提供安全检测、垃圾回收等操作。
4、.Net有很多非托管的资源,比如StreamWriter、 Timer、数据库连接。
非托管代码 unsaft
unsaft 可以用来修饰类、类的成员函数、类的全局变量,但不能用来修饰类成员的局部变量在公共语言运行时(CLR)中,不安全代码是指无法验证的代码。
垃圾回收 GC
什么是GC?
GC(Garbage Collector)如其名,就是垃圾收集,这里仅就内存而言。
GC工作的原理:GC遍历应用程序在Heap(堆)上动态分配的所有对象,通过识别他们是否被引用来确定哪些对象是已经死亡的、哪些仍需要被使用,已经不再被应用程序所引用的对象就是已经死亡的对象。即所谓的垃圾,需要被回收。
.NET的GC机制两个问题:
首先,GC并不是能释放所有的资源。他不能自动释放非托管资源。
第二,GC并不是实时性的,这将会造成系统性能上的瓶颈和不确定性。
GC并不是实时性的,这会造成系统性能上的瓶颈和不确定性。
理解什么是元数据?
元数据:是一种二进制信息,泳衣对存储在公共语言运行库可移植可执行文件(PE)文件或存储在内存中的程序进行描述。
.NET Framework框架体系
框架体系运行概述:
首先编写的C#源文件hello.cs通过C#编译器尽心编译,编译成.NET的PE文件结构,也就是exe文件格式,当程序运行时,Windows的Loder加载器不会负责该程序的内存分配,线程管理等工作,而是只负责跳转到CLR的执行引擎(EE)中,将控制权交由CLR,由CLR进行分配内存,线程管理,异常处理等。
1、IL|MSIL|CIL Microsoft Intermediate Language微软中间语言(IL是MSIL的缩写,编译为中间语言)
2、CTS(Common Tyoe System)通用类型系统
3、CLS(Common Language Specification)公共语言规范
3、CLS
4、CLR
5、JIT(Just in time)即时编译器
6、CLI 公用语言基础架构(Common Language Infrastructure)
7、BCL 基础类库