C#高级特性及项目实战:
CLR:公共语言运行时,开发人员可以从其自己的应用程序中调用已测试的可重用代码库。
CLR是.NETFramework的核心。
CTS是通用类型系统(Common Type System)
CLS是公共语言定义(Common Language Specification)
CLR是公共语言运行时(Common language runtime)
CLR集成了很多种语言,它们之间可以相互访问,是因为CLR建立的标准的类型集、元数据、公共执行环境。由于各种语言间存在着极大的差别,如区分大小写,有的不支持unsigned、操作符重载或者参数可变的方法,所以要想创建这种让别的语言能访问的程序,自己所用的编程语言只能使用其它语言都支持的那些特性。为了帮助我们更好的做到这一点,Microsoft定义了一个"公共语言规范(Common Language Specification,CLS)"
CTS定义了一组语言编译器必须遵循的规则,以定义、引用、使用和存储引用类型和值类型。因此,遵循CTS,在不同语言中编写的对象才能彼此交互。但并不是所有的类型都可以用于所有的语言。
Language complier:语言编译器,每种语言基于.net的语言都会有一个面向CLR的托管模块,也可以理解为语言编译器,把对应的语言编译成MSIL
MSIL:微软中间语言,CLR负责把中间语言编译成为执行程序的计算机可以理解的语言,是一种介于介于高级语言和汇编语言的伪汇编语言.
JIT(Just In-Time compile):即时编译,将MSIL解释为程序可以理解的语言.
IL/MSIL/CIL Microsoft Intermediate Language)微软中间语言(IL是MSIL的缩写,译为中间语言)
2.CTS (Common Type System)通用类型系统
3.CLS (Common Language Specification)公共语言规范
4.CLR (Common Language Runtime)公共语言运行时(也有的叫公共语言运行库)
5.JIT (Just in time)即时编译器
6.CLI 公共语言基础架构(Common Language Infrastructure)
7. BCL 基础类库(Base Class Library)
8. FCL 框架类库(Framework Class Library)
框架体系运行概述:
首先编写的C#源文件hello.cs通过C#编译器进行编译,编译成.NET 的PE文件结构,也就是exe文件格式,当程序运行时,Windows的Loader加载器不会负责该程序的内存分配,线程管理等工作,而是只负责跳转到CLR的执行引擎(EE)中,将控制权交由CLR,由CLR进行分配内存,线程管理,异常处理等。
元数据:是一种二进制信息,用以对存储在公共语言运行库可移植可执行文件 (PE) 文件或存储在内存中的程序进行描述。将您的代码编译为 PE 文件时,便会将元数据插入到该文件的一部分中,而将代码转换为 Microsoft 中间语言 (MSIL) 并将其插入到该文件的另一部分中。在模块或程序集中定义和引用的每个类型和成员都将在元数据中进行说明。当执行代码时,运行库将元数据加载到内存中,并引用它来发现有关代码的类、成员、继承等信息。
元数据存储以下信息:
程序集的说明
类型的说明
属性
什么是GC?
GC(Garbage Collector)如其名,就是垃圾收集,这里仅就内存而言。
GC工作的原理:GC遍历应用程序在Heap(堆)上动态分配的所有对象,通过识别它们是否被引用来确定哪些对象是已经死亡的、哪些仍需要被使用,已经不再被应用程序所引用的对象就是已经死亡的对象,即所谓的垃圾,需要被回收。
NET的GC机制两个问题:
首先,GC并不是能释放所有的资源。它不能自动释放非托管资源。
第二,GC并不是实时性的,这将会造成系统性能上的瓶颈和不确定性
GC并不是实时性的,这会造成系统性能上的瓶颈和不确定性。所以有了IDisposable接口,IDisposable接口定义了Dispose方法,这个方法用来供程序员显式调用以释放非托管资源。使用using语句可以简化资源管理
相关文章
- 10-16C#高级特性及项目实战Day9
- 10-16C#高级特性及项目实战DayOne
- 10-16C#高级特性及项目实战Day10