.net原理
来源:互联网 发布:淘宝助手上传宝贝很慢 编辑:程序博客网 时间:2024/05/22 04:40
MSIL Microsoft Intermediate Language 微软中间语言
MSIL是将.NET程序编译成机器语言的一种过程。编译成的代码不专用于任何一种操作系统,它是一种介于高级语言和基于Inter的汇编语言。每当编译程序,编译器将源代码翻译成MSIL,它是一组可以有效地转换为本机代码且独立于CPU指令。当执行这些指令时JIT将它转换为CPU的特定代码。由于MSIL支持多种JIT,所以同一MSIL代码可以被编译运行在不同的结构上。简单的说程序员就可以选择自己熟悉的语言进行编程。
MSIL包括用于加载、存储和初始化对象以及对对象调用方法的指令,还有控制流内存直接访问、异常逻辑运算。再交由JIT编译器转换为特定鱼CPU的代码。
当编译器产生MSIL时,它也产生元数据。MSIL和元数据包括在一个可移植可执行的PE文件中。
托管代码
在把代码编译成MSIL,再用JIT编译器把它编译成本机代码,CLR(托管)的任务(用.NET Framework编写的代码在执行时是托管的CLR管理着应用程序,其方式是管理内存、允许进行跨语言调试、安全性处理等不在CLR控制之下运行的应用程序是非托管的比如C++的某些代码)。C#只能在托管环境下运行代码我们使用CLR的托管功能,让.NET自己与操作系统进行交互。
应用程序域概念(Application Domain,简App Domain)
我们知道.NET程序都是运行在托管环境(managed environment),但是操作系统只提供了进程(Process),而进程呢又只是提供了内存的控制。所以我们创建的.NET程序是无法直接在进程中运行的,那怎么办呢?这个时候应用程序域作为中介的角色出现了,它能够运行非托管进程和托管进程之上所以我们的WINFROM、WENFROM,控制台应用程序或是程序集都是运行在一个应用程序域中。
单独的库程序集是不能被直接运行的(库程序集即.dll的文件),它必须和一个可执行程序集文件一起启动(可执行程序集即.exe)。当可执行文件加载完毕时,.NET会在当前进程中创建一个应用程序域称为默认域,域的名称和程序集的名称相同,它不能被销毁直至进程销毁。
那C#不是运行在托管环境下的吗?那应用程序域是允许访问加载的程序集的Net Runtime所提供的服务。
一个进程可以包涵多个应用程序域,一个应用程序域可以包涵多个程序集,那有什么好处呢?就是好处1.创建进程的开销要比创建一个应用程序域的开销要大的多,所以创建多个域在进程2.错误隔离,一个应用程序域如果崩溃,只会影响其所在的应用程序域,而不会影响其他应用程序域。
C# 运行机制
1.C#编写应用程序
2.把程序编译成MSIL,存储在程序集中:
3.如果是个可执行文件自动运行或在其他代码使用它时运行,将其通过JIT转换为本机代码:
4.使用托管CLR环境下运行本机代码以及其他程序过程
- .net原理
- ASP.NET 工作原理
- .net引用的原理
- .net framework 工作原理
- .NET程序运行原理
- .net ajax 的原理
- asp.net 运行原理
- asp.net 运行原理
- asp.net工作原理
- Asp.net ajax 原理
- asp.net反射原理
- asp.net运行原理
- asp.net运行原理
- ASP.NET MVC原理
- ASP.NET 运行原理
- ASP.NET运行原理
- asp.net运行原理
- .NET程序编译原理
- Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity
- GitHub详细教程
- IOS开发之UILabel动态高度设置方法
- java中成员变量和局部变量的区别
- 鉴别不使用的索引
- .net原理
- 收集了一些python的文章
- 10款最佳CSS/jQuery开源图片说明
- boot/bootsect.s
- 智慧园区与物联网产业发展论坛将于6月26日在北京举行
- Recreating an Activity
- struts2.3.4,jar包必须添加完整
- 读取Spring配置文件的3种方式
- Java Script 求值