.NET FrameWork简述
1、NET FrameWork目的
一门技术专门用于生成运行应用程序和Service的框架,为了实现什么呢?
提供一个一致的面向对象的编程环境,我们可能创造不同的项目程序和代码,不同在各种情况,比如说有些程序是在本地存储并且执行的,还有一些是在本地执行在网上发布分布,或者远程执行的代码,不管是哪种,它提供了一致的编程环境。
提供一个将软件部署和版本控制冲突最小化的代码执行环境
提供一个可提高代码(包括由未知的或不完全受信任的第三方创建的代码)执行安全性的代码执行环境。
提供一个可消除脚本环境或解释环境性能问题的代码执行环境
是开发人员的经验在面对类型不相同的应用程序保持一致。
按照工业标准生成的所有通信,以确保基于.NET Framework的代码可与其他代码集成。
2、NET FrameWork框架
托管程序必须通过 公共语言运行时才能与操作系统通信
3、Common Language Runtime
CLR实现了管理内存,线程执行,代码执行,代码安全验证,编译和其他系统服务
- 安全性
- 访问安全
- CTS(Common Type System)
- 消除常见的一些问题,比写C++代码时常见的代码内存泄漏、无效的内存引用,提供自动内存管理。
- 提高开发效率
- 兼容性
- 增强性能
- 宿主应用,asp.net可以宿主在IIS上。
4、NET FrameWork Class Library
FCL是与公共语言运行库CLR紧密集成的可重用的类型集合,能用来构建很多各种各样的开发方案,可以用来开发
- 控制台应用程序
- Windows GUI应用程序(Windows窗体)
- WPF
- ASP.NET
- WCF
- WF
CLR公共语言运行时
1、公共运行时的功能
- 性能得到改进
- 能够轻松使用其他语言开发的组件
- 类库提供的可扩展类型
- 语言功能,如面向对象的编程的继承、接口和重载
- 自由的多线程处理支持
- 结构化的异常处理
- 自定义特性的支持
- 垃圾回收
- 使用委托取代函数指针,从而增强了类型安全和安全性
2、公共语言运行时的版本
3、托管执行过程
选择编译器(C#编译器)
编译成MSIL代码(中间语言代码,一组有效可以装换为本机机器语言独立于CPU的指令)
将MSIL编译成本机代码(JIT实施编译器,NGen.exe)
运行代码。
4、自动内存管理
GC的内存,首先分配内存,然后释放内存,我们的垃圾回收器会优化引擎,根据所执行的一些分配来决定具体在什么时候回收释放我们的内存。
那内存分配是有级别和性能的要求,为了优化我们的垃圾回收器的一些性能,我们将我们分配出去的内存分为三代,第0代、第1代、第2代,垃圾回收的算法基于几个基本的普遍原理,假设首先基于压缩托管堆或内存堆一部分内存比压缩整个要快,第二个新对象的生成周期通常比较短,旧的对象生成周期比较长的,第三点内存分配周围的内存通常生命周期比较相近的。
大体上有个新的对象,分配到第0级内存堆里面去,当内存堆满了的时候,它将会在合理的时间去回收,回收的时候发现对象还正在被使用,它就会对那个对象那个内存进行升级,把它放在第1级内存堆里面,同样当第1级内存堆满了的时候,它就会对第1级内存堆进行释放和回收,如果这时这个对象还在被使用时,那么将会被升级到第2级里面去,就这样从0级升级到1级再升级到2级这么一个逻辑进行运作,一共就三级,那么这个对象要么就是在2级内存里面被回收,要么就是一直存放下去
非托管资源要被显示的清除,用一个公共的比如说Dispose方法这样来实现对非托管资源的释放
.NET Framework(FCL)提供的类型
- 类 Class
- 接口
- 值类型
.NET Framework(FCL)提供的功能:
- 表示基础数据类型和异常
- 封装数据结构
- 执行I/O
- 访问关于加载类型的信息
- 调用.NET FrameWork安全检查
- 提供数据访问、多客户端GUI和服务器控制的客户端GUI
System命名空间
System命名空间是.NET FrameWork中基本类型的根命名空间。此命名空间包括表示由所有应用程序使用的基本数据类型的类:Object(继承层次的根)、Byte、Char、Array、Int32、String等