.net概述

CLR是.net Framework 的核心
CLR的核心是CTS和CLS 任何变编程语言 如果想要在.NET CLR上执行 就必须要提供一个编译器
将次语言的程序编译成.net CLR所认识的metadata以及IL 符合CTS的规定

CTS是通用类型系统
CLS是公共语言定义
CLR是公共语言运行时

CLR的执行模型
1.将源代码(vb cs )编译成托管代码块 托管代码块有中间语言和元数据组成
2.讲托管代码合并成程序集 也叫组件 程序集中包含了一张叫做清单的模块
记录了构成程序 及模块构成的信息包括资源文件以及需要引用自己的信息
3.加载公共语言运行库
4 执行程序集的代码
5 生成本地代码

CLI 公共语言基础架构
CLI是一个开放的技术规范
CLR则是对这种规范的一种实现

BCL 基础类库
BCL是一个公共编程框架 称为基类库 所有语言的开发者都能利用它 是CLI的规范之一 主要包括 执行网络操作 执行I/O操作 安全管理 文本操作 数据库操作 XML操作 与事件日志交互, 跟踪和一些诊断操作 使用费托管代码 创建于调用动态代码等 粒度相对较小 为所有框架提供基础支持

FCL 框架类库
FCL提供了大粒度的编程框架 天使针对不同应用设计的框架 FCL大部分实现都引用了BCL 例如我们常说的开发框架:ASP.NeT MVC WCF和WPF等等 提供了针对不同层面的编程框架


托管代码就是VB 和C#编译器编译出来的代码 托管代码在公共语言运行库中运行
非托管代码是运行在公共语言运行库环境的外部 由操作系统直接执行的代码 非托管代码必须提供自己的垃圾回收 类型检查 安全支持等服务

区别:
1 托管代码是一种中间语言 运行在CLR上
非托管代码被编译为机器码 运行在机器上
2 托管代码独立于平台和语言 能更好的实现不同语言平台之间的兼容
非托管代码以来于平台和语言
3 托管代码可享受CLR提供的服务 不需要自己完成这些操作
非托管代码需要自己提供安全监测 垃圾回收等操作
4.net有很多非托管的资源 比如StreamWriter Timer 数据库连接

unsaft可以用来修饰类。类的成员函数 累的全局变量 但不能用来修饰类成员函数内的局部变量 在公共语言运行时,不安全代码是指无法验证的代码 C#中的不安全代码不一定是危险的,只是起安全性无法由CLR进行验证的代码

什么是GC
垃圾收集 这里仅就内存而言
工作原理 遍历应用程序在Heap上动态分配的所有对象 通过识别它们是否被引用来确定哪些对象已经死亡的 哪些仍需要被使用 已经不再被应用程序所引用的对象就是已经死亡的对象 及所谓的垃圾 需要被回收

首先 GC并不是能释放所有的资源 它不能自动释放非托管资源
第二 并不是实时性的 这将会造成系统性能上的瓶颈和不确定性 所以有了IDisposable接口 接口定义了Dispose方法 这个方法用来供程序员显示调用以释放非托管资源

元数据 是一种二进制信息 泳衣对存储在公共语言运行库可移植可执行文件 PE 文件或存储在内存中的程序进行描述

元数据存储的信息 程序集的说明 类型的说明 属性

猜你喜欢

转载自www.cnblogs.com/-zillb/p/11139532.html