.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 文件或存储在内存中的程序进行描述

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

 

posted @ 2019-07-05 17:13  茨林童子  阅读(500)  评论(0编辑  收藏  举报