.NET概念:.NET程序编译和运行-创新互联

程序的编译和运行,总得来说大体是:首先写好的程序是源代码,然后编译器编译为本地机器语言,最后在本地操作系统运行。

我们提供的服务有:成都网站设计、网站建设、外贸网站建设、微信公众号开发、网站优化、网站认证、市南ssl等。为1000多家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的市南网站制作公司

下图为传统代码编译运行过程:

.NET概念:.NET程序编译和运行

.NET的编译和运行过程与之类似,首先编写好的源代码,然后编译为微软中间语言代码,运行的时候即时编译为本地机器语言,同时.NET代码运行时有一个CLR环境来管理程序。如下图为.NET代码编译运行过程:

.NET概念:.NET程序编译和运行

下面详细介绍下编译运行时的一些概念。
1.MSIL和JIT
在编译使用.NET 框架创建的代码时,不是立即创建操作系统特定的本机代码,而是把代码编译为微软中间语言(Microsoft Intermediate
Language,MSIL)代码,这些MSIL代码不专用于任何一种操作系统,也不专用于任何一种语言,有些类似于JAVA的字节码。C#及其他.NET语言,如VB.NET在编译阶段都编译为这种语言。
因为代码在编译阶段没有直接编译成本机代码,所以在执行应用程序时,必须完成更多的工作,这就是Just—In-Time(JIT)编译器的任务。
JIT把MSIL编译为专用于某种操作系统和目标机器结构的本机代码,只有这样,操作系统才能执行应用程序。这里编泽器的名称Just—In—Time,反映了MSIL仅在需要时才编译的特性。
过去,常常需要把代码编译为几个应用程序,每个应用程序用于特定的操作系统和CPU结构,这通常是一种优化形式(例如,为了让代码在AMD芯片上运行将更快),但更多时候是必须的(例如分别运行在Windows和Linux操作系统上)。现在就不必要了,顾名思义,JIT编译器使用MSIL代码,而MSIL代码是独立于机器、操作系统和CPU的。目前有几种JIT编译器,每种编译器都用于不同的结构,我们总能找到一个合适的编译器创建所需的本机代码。这样,用户需要做的工作就比较少了,实际上,用户不必考虑与系统相关的细节,只需要把注意力放在代码的功能上就足够了。

2.程序集
在编译应用程序时,创建的MSIL代码存储在一个程序集中,程序集包括可执行的应用程序文件(这些文件可以直接在Windows上运行,不需要其他程序,其扩展名为.exe)和其他应用程序使用的库(其扩展名是.dll)。

除了包含MSIL外,程序集还包含元数据(即程序集中包含的数据信息)和可选的资源(MSIL使用的其他数据,例如声音和图片文件)。在程序集包含的所有文件中,有一个文件用于保存清单。(清单是元数据部分中一组数据表的集合,其中包含了程序集中一部分文件的名称,描述了程序集的版本,语言文化,发布者,共有导出类型,以及组成该程序集的所有文件)。需要注意的是一个程序集只能一个程序清单。

元数据允许程序集是完全自我描述的,不需要其他信息就可以使用程序集。也就是说,我们不再需要把应用程序所需要的数据添加到系统注册表中,因此,部署应用程序就非常简单了,只需把文件复制到远程计算机中的目录下即可。

当然,不必把运行应用程序所需要的所有信息都安装到一个地方。我们可以编写一些程序集,执行多个应用程序所要求的任务。此时,通常把这些可重用的程序集放在所有应用程序都可以访问的地方。在.NET
框架中,这个地方是“全局程序集高速缓冲存储器”(Global Assembly cache),有相应的工具可以帮助把程序集放在高速缓冲存储器中。

3.托管代码

在把代码编译为MSIL,再用JIT编译器把它编译为本机代码后,CLR的任务还没有完全完成。用.NET
框架编写的代码在执行时是托管的,即CLR管理着应用程序,其方式是管理内存、处理安全性,以及允许进行跨语言调试等。相反,不在CLR控制之下运行的应用程序是非托管的,某些语言如C++可以用于编写这类应用程序,例如,访问操作系统的低级功能。使用C#主要编写在托管环境下运行的代码,它们使用CLR的托管功能,让.NET自己与操作系统进行交互,当然也可以编写在非托管环境下运行的代码,但需要特别标注。托管代码的优点有:1、平台无关性,2、提高性能,3、语言的互操作性。

4.垃圾回收

托管代码最重要的一个功能是垃圾回收(Garbage
Collection),它可确保应用程序不再使用某些内存时,这些内存就会被完全释放。在.NET推出以前,这项工作主要由程序员负责,代码中的几个简单错误会把大块内存分配到错误的地方,使这些内存神秘失踪。这通常意味着计算机的速度逐渐减慢,最终导致系统崩溃。

.NET无用存储单元收集器会频繁检查计算机内存,从中删除不再需要的内容。它可能一秒钟内会进行上千次的检查,也可能几秒钟检查一次,或者随时进行检查,但可以肯定的是进行了检查。

5.应用程序域

在以前传统的开发中我们都知道,一个应用程序对应一个进程,并为该进程指定虚拟内存,由操作系统来映射实际的物理内存,有效的维护了进程之间的安全性。但另一方面,每一个进程都会消耗一定的系统资源,降低了性能,并且进程间的通信也比较麻烦。
在.Net中推出了一个新的概念:应用程序域(AppDomain)。可以理解成很多应用程序域都可以运行在同一个.NET的进程中,可以降低系统消耗,同时不同的域之间互相隔离,在安全性方面有保障。另外对于同一个进程内不同域之间的通信也相对简单一点。

创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。

文章标题:.NET概念:.NET程序编译和运行-创新互联
网址分享:https://www.cdcxhl.com/article30/discso.html

成都网站建设公司_创新互联,为您提供网页设计公司企业网站制作软件开发品牌网站制作小程序开发网站设计

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站建设网站维护公司