net框架运行原理
核心是CLR(通用语言运行时),
c#或者其它各种语言编译原理:将原代码通过相对的编译器(语法检查原代码分析)生成IL代码托管(IL也称托管代码),最后得到一个托管模块,一个或多个托管模块组成程序集(assembly)交给CLR运行;
编译器需要为托管模块生成完整的元数据;
元数据:是一个数据表集合,其中有描述托管模块中引用类型和成员的,还有一些描述他们中成员类型和定义的,元数据和代码一起被嵌入到EXE或者DLL中;
因此编译器同时产生元数据和IL代码,并且将它们嵌入到生成的托管模块中;
元数据在.net中的作用:
元数据省去了源代码编译时对头文件和库文件的需求,编译器可以直接从托管模块中取元数据来获得代码中包含哪些成员和所有被引用的类型;
用元数据辅助我们编写代码,.net的智能感知特性是通过分析元数据来概述我们某个类型提供了哪些方法,以及方法有哪些参数;
CLR代码验证可以用元数据确保执行的安全性;
通过元数据垃圾收集器可以追踪对象的生存期;
程序集中有一些托管模块和资源文件,通过CLR处理后在内部得到所有文件的逻辑组合关系,得到一个清单数据块,这些内容描述了组成程序集的文件;注意:程序集中还包含它所引用的其它程序集的一些信息,这些信息可以使程序集实现自描述,这样也就让CLR的执行不再到注册表中取,因此让程序集的部署要比非托管组件的部署容易得多;
安装VS08,其主要就是CLR的安装,CLR负责管理包含在程序集中的代码执行;系统文件中的mscoree.dll就代表了本机装了.NET框架;由此,我们也就知道Winform开发对于宿主机器会有.NET框架要求,因此打包安装包时要注意添加.netFrameWork作为附件安装;
当生成的是一个EXE程序集,会在编译中产生一些特殊的信息,CLR在加载程序集的时候江通过这些信息定位到应用程序的入口点方法,这样就启动了应用程序;注意非托管程序如果调用托管程序集,托管程序集DLL的入口函数也会去让CLR来处理包含在其中的代码;
mscoree.dll是负责执行程序集,指示引导如何运行.NET框架下的托管程序,
C#是高级编程语言,IL是机器语言,但不同与一般机器语言,它拥有很多高级指令,IL描述上应该讲是面向对象的机器语言;
IL汇编器ILAsm.exe 反汇编器ildasm.exe
混淆器obfuscator,而对于知识产权的保护一是尽量让托管程序和模块留在公司服务器上,向外发布就需要靠混淆器保护,另外如果混淆器还不够,就只能将一些敏感算法通过非托管模块实现;
CLR的介绍
最大的特点允许编程语言混编集成,c#的I/O能力突出,APL侧重高级工程及金融计算;
CLI(开发通用语言基础构造),CLI定义了文件格式,通用类型系统,可扩展元数据系统,中间语言和对平台底层的访问共五项标准;
CLR不能直接执行IL代码,IL代码还需要通过JIT即时编译器转换成CPU指令;
CLR的工作方式:检测代码中引用到的所有类型,分配一个内部数据结构来管理引用类型的访问;当有方法被调用时代码被即时编译验证并转换成CPU指令,并动态保存在内存中;这样,一个方法只有在首次调用时,才会产生一些性能损失,后续调用时不再进行验证转换,而命令CPU做全速执行。
微软对性能做了大量的压缩工作,因此编译器转换首次调用时性能损耗微乎其微;
FCL(.net框架类库程序集)
CTS(通用类型系统)一个关于类型的正式规范,描述了方法、属性和事件的定义,以及类型可见性和访问类型成员的规则;
CTS建立了以程序集作为类型可见性边界的规则;
IDE集成开发环境(VS.NET)自身不支持多文件程序集,(必须通过命令行工具)
net框架运行原理的更多相关文章
- Asp.net WebPages框架运行原理浅析(转)
在Asp.net4和4.5中,新增了WebPages Framework,编写页面代码使用了新的Razor语法,代码更加的简洁和符合Web标准,编写方式更接近于PHP和以前的Asp,和使用 WebFo ...
- Asp.net WebPages框架运行原理浅析
[来源] 达内 [编辑] 达内 [时间]2012-09-14 在Asp.net4和4.5中,新增了WebPages Framework,编写页面代码使用了新的Razor语法,代码更加的简洁和 ...
- thinkphp3.2框架运行原理
thinkphp3.2是使用率非常普遍的国产php框架,以简单易于上手闻名,那么它框架结构是怎样的? tp3.2设计简单来说就是CBD,core(框架核心文件),bebavior(行为,tp3.2一大 ...
- Springmvc的运行原理 SpringMvc的优点
SpringMVC框架运行原理 1:客户端发送请求到前端控制器(DispatcherServlet),前端控制器根据请求信息(url),查询一个或多个HandlerMapping, 前端控制器,来决定 ...
- 测试框架Unitest的运行原理,以及多个测试类中的执行顺序以及简化方法
单元测试单元测试(unit testing)是指对软件中的最小可测试单元进行检查和验证.对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一 ...
- Web自动化必会知识:「Web基础、元素定位、元素操作、Selenium运行原理、项目实战+框架」
1.web 基础-html.dom 对象.js 基本语法 Dom 对象里面涉及元素定位以及对元素的修改.因为对元素操作当中涉及的一些 js 操作,js 基本语法要会用.得要掌握前端的基本用法.为什么要 ...
- 互联网轻量级框架SSM-查缺补漏第七天(MyBatis的解析和运行原理)
第七章MyBatis的解析和运行原理 SqlSessionFactory是MyBatis的核心类之一,其最重要的功能就是提供创建MyBatis的核心借口SqlSession,所以要先创建SqlSess ...
- PHP框架模板原理
PHP框架现在是一种很流行的东西了,很多朋友开发应用与网站都会选择一个PHP框架或模板了,下面我们来看看PHP框架是如何实现的吧. 本文主要来聊聊框架理论,但不针对任何一款框架,不过任何 ...
- ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件)
ASP.NET Core 运行原理剖析2:Startup 和 Middleware(中间件) Startup Class 1.Startup Constructor(构造函数) 2.Configure ...
随机推荐
- EasyUI 数据网格行过滤
前段时间发现一个GridView很有用的功能,可以筛选数据,实现起来很简单 一.添加一个引用,这个可以自己去网上下载 <script type="text/javascript&quo ...
- PL/SQL Developer 导入导出操作
一.PL/SQL Developer数据导入 Tools->Import Tables
- 【iOS】UIViewController基类的实现
继承是面向对象编程语言的三大特性之一,写好基类会给App的开发带来极大的方便.在iOS开发中,一般一个页面就对应一个ViewController,ViewController在开发中用的也很多,写一个 ...
- 重启网卡报错:Device eth0 does not seem to be present
ifconfig...没有看到eth0..然后重启网卡又报下面错误. 故障现象: service network restartShutting down loopback insterface: ...
- UIView圆角设置
对于UIview的圆角设置最简单的就是layer的两个属性分别是cornerRadius和masksToBounds,但是对于设置其中某一个角为圆角的时候需要使用贝塞尔曲线 UIView *aView ...
- python/基础输出输入用法
输出及输入的简单用法 print print,中文意思是打印,在python里它不是往纸上打印,而是打印在命令行,或者叫终端.控制台里面.print是python里很基本很常见的一个操作,它的操作对象 ...
- POJ-3069 Saruman's Army---区间选点
题目链接: https://vjudge.net/problem/POJ-3069 题目大意: 在一条直线上,有n个点.从这n个点中选择若干个,给他们加上标记.对于每一个点,其距离为R以内的区域里必须 ...
- 1.0 添加WEB API项目并按注释生成文档(多项目结构)
1.新建ASP.NET 项目,模板选择如图 2.选择Web API,并选择不进行身份验证方式 成功后我们看到这个结果. 至于其它三种身份验证方式,不太适合我的使用.而且这种方式也可以在代码里去实现身份 ...
- Ubuntu 16.04安装Matlab 2016b教程
由于代码需要依赖Linux环境,只好尝试着装MATLAB,然而各种问题接踵而至,开始了由MATLAB引发的三天Linux探寻之旅-- 下载Matlab 2016b for Linux https:// ...
- nginx location的命中过程
1 先判断精准命中,立即返回结果并结束解析过程 2 判断普通命中,如果有多个命中,"记录"下"最长"的命中结果(注意:记录但不结束,最长的为准) 3 继续判断正 ...