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 ...
随机推荐
- MicrosoftWebInfrastructure 之坑
从svn下载下来的项目,还原提示缺少MicrosoftWebInfrastructure 包 网上大多数解决方法 PM> Install-Package Microsoft.Web.Inf ...
- C#制作ActiveX插件
首先新建项目--->类库,取名:ActiveXDemo 右键项目属性:应用属性==>程序集信息=>使程序集Com可见, 生成==>输出==>为com互操作注册 新建接口类 ...
- multiprocessing.Process() ----------python中的多进程
python 当中 使用封装好的 multiprocessing 为我们实现创建多进程任务. 1 Process()方法创建子进程 使用multiprocessing.Process() 方法产生一个 ...
- Python基础数据类型之字典
基础数据类型之字典 ps:数据类型划分:可变数据类型和不可变数据类型. 不可变数据类型:元组(tupe).布尔值(bool).整数型(int).字符串(str).不可变数据类型也称为可哈希. 可变 ...
- 理解JavaScript中函数方法
1.函数声明和函数表达式 通过字面量创建函数的方式有两种函数声明和函数表达式: 函数声明: function sum(x, y) { var result = x + y; return result ...
- Python/ MySQL练习题(一)
Python/ MySQL练习题(一) 查询“生物”课程比“物理”课程成绩高的所有学生的学号 SELECT * FROM ( SELECT * FROM course LEFT JOIN score ...
- python json.dumps 中的ensure_ascii 参数引起的中文编码问题
在使用json.dumps时要注意一个问题 >>> import json >>> print json.dumps('中国') "\u4e2d\u5 ...
- Java之GC
Java之GC GC:GC 是JVM的垃圾回收器.与C/C++不同,java程序员无需考虑太多内存分配的位置,更不用考虑内存释放的机制,java对象内存的申请和释放都有JVM托管.JVM的内存释放机制 ...
- oracle11g中SQL优化(SQL TUNING)新特性之SQL Plan Management(SPM)
1. 简介 Oracle Database11gR1引进了SQL PlanManagement(简称SPM),一套允许DBA捕获和保持任意SQL语句执行计划最优的新工具,这样,限制了刷新优化器统计 ...
- testng执行多个suite
由于testng.xml中只能设置一个<suite>标签,就无法创建多个测试集,通过<suite-files >标签可以实现允许多个测试集. 1.testng.xml中引入多个 ...