.NET框架概述

.NET 框架为.NET应用程序运行提供虚拟机环境,为.NET应用程序提供编译、运行、内存管理、垃圾回收、安全等服务。

 

.NET框架组成部分

1.公共语言运行时(Common Language Runtime,CLR)

2.NET框架类库(并非.NET框架中的所有类库代码都是纯粹的托管代码编写的,.NET框架中有相当数量的类是对Win32 API的封装)

 

托管代码

使用.NET公共语言运行时提供的代码,反之为非托管代码(如 Win32 API)

 

通用语言组织框架(CLI Common Language Infrastructure)

规定如何在运行库中声明、使用和管理类型,同时也是运行库支持跨语言互操作的一个重要组成部分

1.建立一个支持跨语言集成、类型安全和高性能代码执行的框架

2.提供一个支持完整实现多种编程语言的面向对象模型

3.定义各个语言必须遵守的规则,有助于确保用不同语言编写的对象能够交互作用

 

公共语言运行时(CLR)

负责管理.NET应用程序编译、运行、代码类型安全检查、内存分配、线程管理、安全、垃圾回收等服务,为.NET应用程序提供一个虚拟的运行环境

 

通用类型系统(CTS Common Type System)

CTS定义了一个类型库,无论是VB还是C#,他们的数据类型都是一致的,因此.NET将各种不同的编程语言的数据类型进行抽象,就诞生了CTS。

CTS类型主要分为:值类型和引用类型 http://wenku.baidu.com/link?url=LHBzlpJ8zHnLvsNzcmGxjpGgOolfq721gDvoVTY7gtNHTUbmhf_Zv8z0GliZECRuyg020kqZhZEtWVawStyqJZGxAFoDSMvva411vNACau7

 

公共语言规范(CLS Common Language Specification)

CLS是CTS的子集,目标是让.NET平台上用不同的编程语言编写的对象之间可以互相调用

 

CTS、CLR、CLS 三者关系如下:

 

值类型:存储在内存的堆栈中,快速访问,超出作用范围自动释放内存,垃圾回收机制不参与回收。

引用类型:分配在内存中,默认NULL ,在栈中分配内存的地址,操作时通过指针寻找,通过垃圾回收机制回收。将一个引用类型变量的内容赋值给另一个引用类型的变量时,只是变量的内存地址被拷贝。

 

装箱:将值类型转换成引用类型 int i=0; object o=i;

拆箱:将引用类型转换为值类型 int i=0;object o=i;int j=(int)o;

装箱和拆箱对性能损耗是有影响的。

 

即时编译(JIT)

  1. 在编译期:CLR对C#代码进行一次编译,生成中间代码DLL或者EXE。
  2. 在运行期,CLR根据硬件环境使用JIT(即时编译引擎),将中间代码编译为二进制代码并执行。
  3. 编译好的二进制代码被存放到一个缓存区缓存,下次调用相同的代码就直接从缓存区中调用,也就是说相同的代码只会编译一次。

     

NGEN(本机映像生成器)编译

本机映像生成器(Ngen.exe)是一个提高托管应用程序性能的工具。Ngen.exe创建本机映像(包含经编译的特定于处理器的机器代码的文件),并将它们安装到本地计算机上的本机映像缓存中。运行库可从缓存中使用本机映像,而不是使用实时编译器编译原始程序集。

 

中间语言(MSIL 现在称为CIL Common Intermediate Language)

 

参考《C#4.0权威指南》

C#学习系列-.NET体系结构的更多相关文章

  1. C#学习系列-文章导航

    C#学习系列-.NET体系结构 C#学习系列-类与结构的区别 C#学习系列-String与string的区别 C#学习系列-抽象方法与虚拟方法的区别 C#学习系列-out与ref的区别 C#学习系列- ...

  2. 【深度学习系列3】 Mariana CNN并行框架与图像识别

    [深度学习系列3] Mariana CNN并行框架与图像识别 本文是腾讯深度学习系列文章的第三篇,聚焦于腾讯深度学习平台Mariana中深度卷积神经网络Deep CNNs的多GPU模型并行和数据并行框 ...

  3. 【深度学习系列2】Mariana DNN多GPU数据并行框架

    [深度学习系列2]Mariana DNN多GPU数据并行框架  本文是腾讯深度学习系列文章的第二篇,聚焦于腾讯深度学习平台Mariana中深度神经网络DNN的多GPU数据并行框架.   深度神经网络( ...

  4. MySQL学习笔记-MySQL体系结构总览

    MySQL体系结构总览 不管是用哪种数据库,了解数据库的体系结构都是极为重要的.MySQL体系结构主要由数据库和数据库实例构成. 数据库:物理操作系统文件或者其它文件的集合,在mysql中,数据库文件 ...

  5. 分布式学习系列【dubbo入门实践】

    分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...

  6. Entity Framework Code First学习系列目录

    Entity Framework Code First学习系列说明:开发环境为Visual Studio 2010 + Entity Framework 5.0+MS SQL Server 2012, ...

  7. WCF学习系列汇总

    最近在学习WCF,打算把一整个系列的文章都”写“出来,包括理论和实践,这里的“写”是翻译,是国外的大牛写好的,我只是搬运工外加翻译.翻译的不好,大家请指正,谢谢了.如果觉得不错的话,也可以给我点赞,这 ...

  8. EF(Entity Framework)系统学习系列

    好久没写博客了,继续开启霸屏模式,好了,废话不多说,这次准备重新系统学一下EF,一个偶然的机会找到了一个学习EF的网站(http://www.entityframeworktutorial.net/) ...

  9. MVC学习系列4--@helper辅助方法和用户自定义HTML方法

    在HTML Helper,帮助类的帮助下,我们可以动态的创建HTML控件.HTML帮助类是在视图中,用来呈现HTML内容的.HTML帮助类是一个方法,它返回的是string类型的值. HTML帮助类, ...

随机推荐

  1. 将 project.json 项目转换为 Visual Studio 2015 解决方案

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  2. 微信小程序的两个BUG?

    微信小程序的两个BUG,也许可能是我搞错了 1.wx.uploadFile 用循环上传图片的时候,电脑.苹果手机上都会正常,安卓机上面则会出现the same task is working的问题 2 ...

  3. Unity : Ran out of trampolines of type 2

    Unity 导出游戏到 iOS 平台,当时选择的设置是 mono2x, 结果游戏各种莫名其妙的崩溃,再崩溃, 几乎运行不到一分钟就崩溃,而在 editor 和 android 平台都是正常的. 查看出 ...

  4. ubuntu下面mysql,通过载入txt文件初始化数据表

    环境:ubuntu12.04   mysql(通过apt安装) (1)根据数据表中的属性列,对应在txt中构造记录(一行对应一条记录),不同属性之间通过tab键(以/root目录下构建的init.tx ...

  5. 最新Ubuntu10.10 更新源

    Ubuntu10.10这个版本真的很老了,官方N多年前早已不再支持更新软件源了. 目前可用的有中科大镜像更新源. 中科大Ubuntu 10.10源列表: deb http://mirrors.ustc ...

  6. MVC4 学习笔记 之 URL中存在编译的空格 20%20%

    /Config/Edit/QQCC%20%20%20%20%20%20%20 原因是: 通过EF直接添加了空格? NO 是因为你的数据库字段设计问题,因为你当然设计如>:sID nchar(10 ...

  7. 解决Win7下VC++6.0与Office不兼容的问题

    在Windows7下安装Visual C++ 6.0后,如果同时安装了Microsoft Office就会出现打开文件的时候出现异常,而导致VC6崩溃. 微软已经为我们解决了问题,开发出一个插件(Fi ...

  8. ‘ant-version’不是内部或外部命令,也不是可运行的程序

    下载apache-ant-1.9.2-bin.zip后,解压目录:F:\selenium\apache-ant-1.9.2 配置环境变量,在“我的电脑->属性->高级->环境变量 - ...

  9. [转]Maven 划分模块

    所有用Maven管理的真实的项目都应该是分模块的,每个模块都对应着一个pom.xml.它们之间通过继承和聚合(也称作多模块,multi-module)相互关联.那么,为什么要这么做呢?我们明明在开发一 ...

  10. excel转化为table(去掉所有列值都为空的值一行,即返回有效值的DataTable)

    /// <summary> /// 去掉所有列值都为空的值一行,即返回有效值的DataTable /// </summary> /// <param name=" ...