简单了解.NET Framework

一、CLR集成了很多种语言,他们之间可以互相访问,是因为CLR建立的标准的类型集、元数据、公共执行环境。

  由于各种语言间存在着极大的差别,如区分大小写,有的不支持unsigned、操作符重载或者参数可变方法,

  所以想要创建这种让别的语言能访问的程序,自己所用的编程语言只能使用其它语言都支持的那些特性。

  为了帮助我们更好的做到这一点,Microsoft定义一个“公共语言规范(Common Language Specification,CLS)”。

二、CTS定义了一组语言编译器必须遵循的规则,以定义、引用、使用和存储引用类型和值类型。因此,遵循CTS在不同语言中编写的对象才能彼此交互。但并不是所有的类型都可以用于所有的语言。

三、Language Complile:语言编译器,每种语言基于.net的语言都会有一个面向CLR的托管模块,也可以理解为语言

  编译器,把对应的语言编译成MSIL。

  MSIL:微软中间语言,CLR负责把中间语言编译成为执行程序的计算机可以理解的语言,是一种介于高级语言和

     汇编语言的伪汇编语言。

  JIT(Just In-Time Compile):即时编译,将MSIL解释为程序可以理解的语言。

四、CLR的执行模型

  1、将源代码(vb、cs)编译成托管代码块。托管代码块有中间语言和元数据组成。

  2、将托管代码合并成程序集,也叫组件(dll)。程序集中包含了一张叫做“清单”的模块,记录了构成程序集模块构成

    的信息包括资源文件及需要引用自己的信息。

  3、加载公共语言运行库。

  4、执行程序集的代码。

5、生成本地代码。

五、CLI,公共语言基础架构(Common Language Infrastr)。 CLI是一种规范。而CLR则是对这种规范的一个实现。

六、BCL,基础类库(Base Class Library)

  BCL是一个公共变成框架,称为基类库,所有语言的开发者都能利用它。是CIL(Common Language Infrastructure

  ture,公共语言基础结构)的规范之一,主要包括:执行网络操作,执行I/O操作,安全管理,文本操作,数据库操作,

  XML操作,与事件日志交互,跟踪和一些诊断操作,使用非托管代码,创建与调用动态代码等,粒度相对较小,为

  所有框架提供基础支持。

七、FCL,框架类库(Framework Class Library)

  FCL提供了大粒度的编程框架,它是针对不同应用的框架,FCL大部分实现都引用了BCL,例如我们常说的开发框

  架:ASP.NET、MVC、WCF和WPF等等,提供了针对不同层面的变成框架。

八、托管代码与非托管代码

  1、托管代码就是Visual.NET和C#编译器编译出来的代码,托管代码在公共语言运行库(CLR)中运行。

  2、非托管代码是运行在公共语言运行库环境(CLR)的外部,由操作系统直接执行的代码。非托管代码必须提供

    自己的垃圾回收、类型检查、安全支持等服务。

  区别:

      1、托管代码是一种中间语言,运行在CLR上;

         非托管代码被编译为机器码,运行在机器上。

      2、托管代码独立于平台和语言,能更好的实现不同语言平台之间的兼容;

        非托管代码依赖于平台和语言。

      3、托管代码可享受CLR提供的服务(如安全检测、垃圾回收等),不需要自己完成这些操作;

        非托管代码需要自己提供安全检测、垃圾回收等操作。

      4、.Net有很多非托管的资源,比如StreamWriter、Timer、数据库链接。

九、非托管代码Unsaft

  Unsaft可以用来修饰类、类的成员函数、类的全局变量,但不能用来修饰类成员函数内的局部变量,在公共语言

  运行时(CLR)中,不安全代码是值无法验证的代码。C#中的不安全代码不一定是危险的,只是其安全性无法由

  CLR进行验证的代码。因此,CLR只对在完全受信任的程序集中的不安全代码执行操作。如果使用不安全代码,由

  您负责确保您的代码不会引起安全风险或指针错误。

  运行Unsaft,需要设置:

    1、单击“配置属性”文件夹。

    2、单击“生成”属性页。

    3、修改“允许不安全代码块”属性。

十、垃圾回收GC

  1、什么是GC?

    GC(Garbage Collector)如其名,就是垃圾收集,这里仅就内存而言。

  2、GC的工作原理:

    GC遍历应用程序在Heap(堆)上动态分配的所有对象,通过识别他们是否被引用来确定那些对象是已经死亡的、

    哪些仍需要被使用,已经不再被应用程序所引用的对象就是已经死亡的对象,即所谓的垃圾,需要被回收。

 十一、.NET的GC机制两个问题:

  1、首先,GC并不是能释放所有的资源。它不能自动释放非托管资源。

  2、GC并不是实时性的,这会造成系统性能上的瓶颈和不确定性。所以有了IDisposable接口,IDisposable接口定义

    了Dispose方法,这个方法用来供程序员显示调用以释放非托管资源。使用using语句可以简化资源管理                           GC.Collect()方法。  作用:强制进行垃圾回收。

十二、什么是元数据?

  元数据是一种二进制信息,用以对存储在公共语言运行库可移植可执行文件(PE)文件或存储在内存中的程序进行 

  描述。         元数据存储以下信息: 程序集的说明、类型的说明、属性。

十三、.NET Framework 框架体系

十四、.NET Framework概念回顾

    1、IL/MSIL/CIL  Microsoft Intermedidte 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);

以上就是简单了解.NET Framework的详细内容,更多关于.NET Framework的资料请关注我们其它相关文章!

(0)

相关推荐

  • IIS和.net framework 4.0的安装顺序导致的问题(重新注册.net 4.0)

    装了64位的Win7后,装了VS再装IIS,结果IIS里面有.NET4.0,但是程序始终是跑不起来,最后觉得可能是因为4.0没有注册到IIS,因为之前在win2003中有遇到类似的情况.最终成功解决,总结:在win7下如果先安装vs2010 (附带会安装Microsoft .NET Framework 4)后安装iis7的话,必须注册iis才可以用. 附带我安装命令吧: C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe

  • Win10下安装Sql Server 2014反复提示需安装.NET Framework 3.5 SP1的解决方案

    一.首先安装.NET Framework 3.5 离线安装方式: 1.装载相对应的系统安装盘,我是Windows 10 x64 企业版,所以装载Windows 10 x64 企业版安装镜像ISO,盘符为H. 2.以管理员身份运行命令提示符(Win键+X键,选择命令提示符(管理员)),输入以下命令: dism.exe /online /enable-feature /featurename:NetFX3 /Source:H:\sources\sxs 等待部署完成即可. 在线安装方式: 1.打开控制

  • 解决Win10无法安装.Net Framework 3.5提示错误代码0x800F081F

    重新安装了一遍Win10,但是不知怎的无法安装.net framework 3.5,即便是下载离线安装包也没法用. 网上有人说需要使用win10的ISO文件,个人感觉太麻烦,在这里分享一个很方便的操作. 首先,你需要下载cab版的.net3.5文件:点击下载 下载好知乎将文件直接复制到C盘的Windows文件夹里,然后打开"命令提示符(管理员)"或者"Wiondows PowerShell(管理员)". 输入以下命令,再按回车: dism /online /Enab

  • 安装.NET Framework进度条卡住不动的解决方案(推荐)

    VS在安装之前需要安装.NET Framework,我安装的是4.0版本.但是安装进度条到一半左右时就卡住不动了.前前后后重试多次,还有几次重新开机,但都没用. 开始还以为是安装的系统有问题.后来在网上求助,尝试几次之后终于找到了解决方案.这里记下来,方便以后使用.以下为主要的操作步骤: 1. 需要关闭系统的update服务:快捷键Win+R打开服务面板,输入"services.msc"打开服务管理,找到"Windows Update"选项, 右键点击"停

  • 无盘完美解决Windows Server 2012或2016无法安装.NET Framework3.5的方法

    问题描述 使用 Windows Server 2012 R2 或 Windows Server 2016系统,发现在安装 .NET Framework 3.5.1 时报错,报错内容如下图所示. 原因分析 找不到安装源文件. 解决办法 您可以使用如下PowerShell脚本进行安装. 从 开始 菜单中找到 PowerShell,右键单击选择 以管理员身份运行. 输入如下脚本后,按回车键执行. Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Micro

  • 无法启动.NET Framework NGEN v4.0.30319_X86服务的解决方法

    无法启动 Microsoft .NET Framework NGEN v4.0.30319_X86服务..导致快速存储技术不无自动启动 .NET Runtime Optimization Service (clr_optimization_v2.0.50727_64) - Tried to start a service that wasn"t the latest version of CLR Optimization service. Will shutdown(glory69 ) 小昕:快

  • Windows Server 2012 R2或2016无法安装.NET Framework 3.5.1的解决方法

    问题描述 使用 Windows Server 2012 R2 或 Windows Server 2016系统,发现在安装 .NET Framework 3.5.1 时报错,报错内容如下图所示. 原因分析 找不到安装源文件. 解决办法 您可以使用如下 PowerShell 脚本进行安装. 从 开始 菜单中找到 PowerShell,右键单击选择 以管理员身份运行. 输入如下脚本后,按回车键执行. Set-ItemProperty -Path 'HKLM:\SOFTWARE\Policies\Mic

  • 使用aspnet_regiis.exe重新注册.NET Framework

    重新安装IIS以后,需要用aspnet_regiis.exe来注册.NET Framework, 如下: C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_regiis.exe -i 如果机器上同时装有多个版本的 .NET Framework ,注册不同版本.NET Framework的方法如下: asp.net 2.0 C:\WINDOWS\Microsoft.NET\Framework\v2.0.507\aspnet_regiis.exe

  • 简单了解.NET Framework

    一.CLR集成了很多种语言,他们之间可以互相访问,是因为CLR建立的标准的类型集.元数据.公共执行环境. 由于各种语言间存在着极大的差别,如区分大小写,有的不支持unsigned.操作符重载或者参数可变方法, 所以想要创建这种让别的语言能访问的程序,自己所用的编程语言只能使用其它语言都支持的那些特性. 为了帮助我们更好的做到这一点,Microsoft定义一个"公共语言规范(Common Language Specification,CLS)". 二.CTS定义了一组语言编译器必须遵循的

  • Entity Framework系统架构与原理介绍

    一.Entity Framework概要 Entity Framework是微软的Object Relational Mapper(对象关系映射),也就是我们平常说的ORM,它可以让应用程序开发者将关系型数据作为业务模型来使用,也消除了开发者为数据访问编写的绝大多数管道代码的需要(比如使用ADO.NET).Entity Framework提供了一个综合的.基于模型的系统,通过摆脱为所有的领域模型编写相似的数据访问代码,使得开发者创建数据访问层是如此之简单.Entity Framework的首发版

  • iOS创建与使用静态库

    在日常项目开发中,不论是为了两个公司项目上的业务交流还是为了减少项目的编译时间,有的时候我们会把项目中的私密内容打包成静态库,或者是把项目中变动较少一部分打包成静态库以便提高编译效率,那么下面我们就来学习一下"iOS-静态库的创建与使用": (一)iOS静态库.动态库与Framework静态库与动态库的区别 (1)什么是库? 库(Library)直白一点说就是一段编译好的二进制代码,加上头文件就可以供别人使用;(例如: iOS中Objective-C编译下的.h和.m文件,打包静态库后

  • .Net中的序列化和反序列化详解

    序列化和反序列化相信大家都经常听到,也都会用, 然而有些人可能不知道:.net为什么要有这个东西以及.net Frameword如何为我们实现这样的机制, 在这里我也是简单谈谈我对序列化和反序列化的一些理解. 一.什么序列化和反序列化 序列化通俗地讲就是将一个对象转换成一个字节流的过程,这样就可以轻松保存在磁盘文件或数据库中.反序列化是序列化的逆过程,就是将一个字节流转换回原来的对象的过程. 然而为什么需要序列化和反序列化这样的机制呢?这个问题也就涉及到序列化和反序列化的用途了, 对于序列化的主

  • Memcached常用命令以及使用说明详解

    存储命令的格式:<command name> <key> <flags> <exptime> <bytes><data block>参数说明如下: <command name> set/add/replace <key> 查找关键字 <flags> 客户机使用它存储关于键值对的额外信息 <exptime> 该数据的存活时间,0表示永远 <bytes> 存储字节数 <da

  • Memcached常用命令及使用说明

    一.存储命令 存储命令的格式: <command name> <key> <flags> <exptime> <bytes> <data block> 参数说明如下: <command name> set/add/replace <key> 查找关键字 <flags> 客户机使用它存储关于键值对的额外信息 <exptime> 该数据的存活时间,0表示永远 <bytes> 存储

  • 浅谈.Net中的序列化和反序列化

    序列化和反序列化相信大家都经常听到,也都会用, 然而有些人可能不知道:.net为什么要有这个东西以及.net Frameword如何为我们实现这样的机制, 在这里我也是简单谈谈我对序列化和反序列化的一些理解. 一.什么序列化和反序列化 序列化通俗地讲就是将一个对象转换成一个字节流的过程,这样就可以轻松保存在磁盘文件或数据库中.反序列化是序列化的逆过程,就是将一个字节流转换回原来的对象的过程. 然而为什么需要序列化和反序列化这样的机制呢?这个问题也就涉及到序列化和反序列化的用途了, 对于序列化的主

  • Android Framework Application Framework层简单介绍

    引言 Android的四层架构相比大家都很清楚,老生常谈的说一下分别为:Linux2.6内核层,核心库层,应用框架层,应用层.我今天重点介绍一下应用框架层Framework,其实也是我自己的学习心得. Framework层为我们开发应用程序提供了非常多的API,我们通过调用特殊的API构造我们的APP,满足我们业务上的需求.写APP的人都知道,学习Android开发的第一步就是去学习各种各样的API,什么Activity,Service,Notification等.这些都是framework提供

  • Zend Framework教程之模型Model用法简单实例

    本文实例讲述了Zend Framework教程之模型Model用法.分享给大家供大家参考,具体如下: 附一个简单粗俗的例子.只是大概说明了用法:如果要深究,可以自己跟踪源码了解. model_demo1 │  .project │  .buildpath │  .zfproject.xml │ ├─.settings │      org.eclipse.php.core.prefs │      .jsdtscope │      org.eclipse.wst.jsdt.ui.superTy

  • Zend Framework中的简单工厂模式 图文

    前段时间用来ZF,把他当黑盒感觉不是很好,一直有看其源码的冲动,但是...如果一点一点点看的话,挑战确实有些大了.某天又然后想到好久没复习设计模式了.综合一下,复习一个设计模式之后在ZF中找一下使用这模式的源码吧,不读所有源码,读读比较"高级"的部分吧,要说模式,暂时不知道是不是所有模式ZF里面都有,但是应该有足够的模式够我最近看了,在说可以找找其他开源的软件来找模式.这段时间被各种笔试神马乱七八糟的把生活搞得稍微有点乱,但是不管怎样,复习还是必须的吧.再说一下ZF吧,ZF一个好处就是

随机推荐