摘录:

前段时间从网上看到ASP和ASP.NET之间的区别中有这样一句话“asp是解释运行,.net是编译执行”,从网上有深入查了查觉得有些收获,整理了一下就发上来了。

计算机并不能直接地接受和执行用高级语言编写的源程序,源程序在输入计算机时,通过"翻译程序"翻译成机器语言形式的目标程序,计算机才能识别和执行。这种"翻译"通常有两种方式,即编译方式和解释方式。

编译方式是指利用事先编好的一个称为编译程序的机器语言程序,作为系统软件存放在计算机内,当用户将高级语言编写的源程序输入计算机后,编译程序便把源程序整个地翻译成用机器语言表示的与之等价的目标程序,然后计算机再执行该目标程序,以完成源程序要处理的运算并取得结果。编译程序是将所有的内容一次性全部翻译,再交由计算机执行。如编译程序一般会生成一个如*.exe,与低级语言等价的可执行程序(低级语言的目标程序,汇编程序),这个可执行程序就是编译好的目标程序,计算机再执行这个程序,将其整个翻译成机器语言。

解释方式是指源程序进入计算机后,一般是读一句源程序,翻译一句,执行一句,不产生目标代码。如PASCAL、FORTRAN、COBOL等高级语言执行编译方式;BASIC语言则以执行解释方式为主;而PASCAL、C语言是能书写编译程序的高级程序设计语言。

编译程序与解释程序最大的区别之一在于前者生成目标代码,而后者不生成;此外,前者产生的目标代码的执行速度比解释程序的执行速度要快;后者人机交互好,适于初学者使用。用COBOL、FORTRAN等语言编写的程序考虑到执行速度一般都是编译执行。

一般来说,解释的速度比编译慢,编译是一次性开销,解释每次运行都引起额外开销。

.NET的编译勉强算是编译,但不是传统意义上的编译。应该说是个更高级的解释过程。

编译:编好程序选择生成时,从 源码编译到中间语言(IL),这个中间语言是.NET自已的一种语言格式,虽然它也是 EXE,但它并非直接可以执行的二进制代码,而是一种比源码更为紧凑的程序代码。
      解释:软件执行的时候,系统会自动加载 .NET Framework 对中间语言形式的 EXE 进行解释运行。

它的过程分两步,首先是源代码到中间代码的“编译”,这一步严格说不是编译,只是将源代码翻译成了中间代码,但是形式上像是传统的编译-生成了可执行文件。但是这个可执行文件并不是真正的可执行文件,需要.NET框架在你运行它的时候再及时翻译为CPU机指令,它的改进在于这个及时编译比传统的解释方式性能更好,因为程序中的指令不是每次运行都解释,而是在程序首次运行时一次性编译(解释),只要程序没有退出,解释的过程就不再发生。

以下是对公共语言运行时(CLR)的一些解释。

1.2  .NET Framework的架构

现在的计算机编程语言的执行方式分为两种,一种是编译执行,一种是解释执行。编译执行是指源程序代码先由编译器编译成可执行的机器码,然后再执行;解释执行是指源代码程序被解释器直接读取执行。编译执行的编程语言我们常见的有C、C++、VB等,解释执行的有Python、Java Script、HTML等编程语言。编译执行和解释执行各有优缺点,比如我们说编译执行的语言通常执行效率高,而解释执行的语言通常可以灵活的跨平台,下图(图1.3)展现了编译执行和解释执行的原理:

 
图1.3  程序执行原理图

对于计算机来讲它只是一台机器,它只能认识0101011这样的二进制机器指令。编译执行一次性将高级语言源程序编译成二进制的可执行指令。而解释执行是由该语言(如HTML)运行环境(如浏览器)读取一条该语言的源程序,然后转变成二进制指令交给计算机执行。如果把高级语言源代码比作一本外文书籍,那么编译执行就是一次性翻译成中文,然后你再看;而解释执行就是你拿着个翻译机,读一行翻译一行的看。这里要注意的是,我们说编译执行的程序,源代码需要一个叫编译器的装置编译成操作系统可执行的机器码,形式比较统一,而解释执行就不一样了,它的形式和方法各异,我们说网页HTML代码它是靠浏览器解释执行的,而可以在Office中使用的脚本语言VBScript却是由Office来负责运行的。

1.2.1  什么是公共语言运行时(CLR)

当然,上面这些都是比较传统的程序代码执行方式,从Java语言开始,一种新的程序语言执行方式产生了,这就是“中间码+虚拟机”执行机制。这种执行方式,程序语言源代码需要被编译成一种特殊的中间码,这种中间码是不能直接执行的,它需要一个叫“虚拟机”的装置来管理和执行,可以是解释执行也可以是编译执行。因为“虚拟机”可以参与和管理程序代码的执行,因此解决了很多传统编译语言一些致命的缺点,如垃圾内存回收、安全性检查等。也是因为如此,.NET框架也采用了此种语言执行方式,这里管理和执行中间码“虚拟机”在.NET框架中就是公共语言运行时(CLR),它负责管理和执行由.NET 编译器编译产生的中间语言代码。右图(图1.4)展示了.NET程序的执行原理:

 

整个执行过程是这样的,首先我们在开发环境Visual Studio .NET中编写C#代码,然后这些源代码被Visual Studio .NET中内置的C#编译器编译成中间语言代码(中间语言是一种类似于汇编的程序语言,还不是机器码,我们后面会专门介绍),最后中间语言代码由操作系统中.NET Framework的组件CLR管理和执行。另外,从上图你也可以看出,公共语言运行时的另外一个作用是可以轻松地实现跨平台。当然,条件是要在操作系统上安装.NET Framework,这个跨语言的原理是和Java一样的,安装了语言运行时的操作系统就可以识别和运行中间语言代码。值得一提的是,虽然微软自己并不提倡跨平台(跨平台会影响Windows操作系统的市场垄断),但现在已经出现了在Linux操作系统中运行和编辑.NET程序的平台,就是Mono平台。该平台包括有C#编译器、公共语言运行时以及相关的一套.NET类库。Mono平台可使开发者开发的.NET应用程序不仅能在Windows上运行,也能在任何支持Mono的操作系统上运行,包括现有的Linux和UNIX操作系统。

关于公共语言运行时还要注意,. NET里面的CLR和Java里面的虚拟机JVM是不同的,我们说Java的虚拟机一般是解释执行的,而CLR是编译执行,是在应用程序第一次被调用时一次性编译成机器码再执行,这样做的好处一个是尽可能的避免了解释执行所带来的效率降低的问题;另外可以做到充分利用本机资源,CLR可以针对本地的资源进行优化编译,这个特性人们考虑可能在将来会使.NET代码的执行效率甚至超过C++,因为C++编译器是通用的,并没有照顾到不同计算机本地资源的不同

asp .net 和 ASP相关推荐

  1. [Asp.net MVC]Asp.net MVC5系列——添加数据

    目录 概述 显示添加数据时所用表单 处理HTTP-POST 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列--第一个项目 [Asp.net MVC]Asp.net MVC5系列 ...

  2. ASP+Access中文乱码的解决方法,ASP中文乱码,asp乱码问题

    确保编码声明正确(例:时尚淘女之家http://www.tao36524.com) 如果您使用的是国外空间,默认是西欧而不是GB2312,你可以通过强制为GD2312的方式! 在数据提取页面的第一行代 ...

  3. 1月4日链接篇:ASP.NET, ASP.NET AJAX, ASP.NET MVC, Visual Studio, IIS7

    [原文地址]Jan 4th Links: ASP.NET, ASP.NET AJAX, ASP.NET MVC, Visual Studio, IIS7 [原文发表日期] Friday, Januar ...

  4. ASP 代码给 ASP 页加密码保护

    本任务的内容 概要 创建应用程序 测试应用程序 其他注意事项 疑难解答 参考 概要 本文演示如何编写简单的 Active Server Pages (ASP) 代码来通过登录页对访问进行限制. 本文介 ...

  5. .NET、C#和ASP.NET,ASP.NET MVC 四者之间的区别

    from:http://www.cnblogs.com/wwym/p/5555772.html 经常,会有一些人搞不清楚.NET和c#和ASP.NET这三者之间的关系,她们都是什么呢?他们之间有什么关 ...

  6. ASP.NET与ASP.NET Core用户验证Cookie并存解决方案

    在你将现有的用户登录(Sign In)站点从ASP.NET迁移至ASP.NET Core时,你将面临这样一个问题--如何让ASP.NET与ASP.NET Core用户验证Cookie并存,让ASP.N ...

  7. ASP.NET和ASP的区别?

    ASP.NET和ASP的最大区别在于编程思维的转换以及功能的增强.         ASP使用VB/JS这样的弱类型.面向结构的脚本语言混合html来编程,         而非面向对象,这就明显产生 ...

  8. asp毕业设计——基于asp+access的新闻发布系统设计与实现(毕业论文+程序源码)——新闻发布系统

    基于asp+access的新闻发布系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于asp+access的新闻发布系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦.需要下载开 ...

  9. asp毕业设计——基于asp+access的学生排课管理系统设计与实现(毕业论文+程序源码)——学生排课管理系统

    基于asp+access的学生排课管理系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于asp+access的学生排课管理系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦.需 ...

  10. asp毕业设计—— 基于asp+access的网上教学系统设计与实现(毕业论文+程序源码)——网上教学系统

    基于asp+access的网上教学系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于asp+access的网上教学系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦.需要下载开 ...

最新文章

  1. Pulsar:下一代消息引擎真的这么强吗?
  2. android小程序源代码_我从 Android 转到微信小程序的思考
  3. 码神日志N0.1|专场邀请:深度解析音视频技术(内有福利哦~)
  4. c语言c99标准_自学C语言之一
  5. P2597-[ZJOI2012]灾难【DAG支配树】
  6. Linux网络编程---I/O复用模型之epoll
  7. squid服务配置(正向、反向代理)
  8. 修改 JSON 对象的值
  9. spring-boot-2.0.3应用篇 - shiro集成
  10. 预告:公共语言运行库(CLR)开发系列课程(4):COM Interop进阶
  11. Linux安装卸载Mysql数据库
  12. 怎么用EasyRecovery把文件夹中丢失的数据恢复
  13. 如何用excel批量生成word文档,并且命名?
  14. aut0cad2010卸载工具_解决软件注册表卸载不干净导致的autocad2010无法安装问题。...
  15. 如何正确地将Blender模型导入进Unity3D
  16. Apache JMeter 5.1.1 Win 10 环境变量配置
  17. docker之mongo数据库忘记用户名密码
  18. 【Bioinfo Blog 011】【R Code 008】——功能富集分析
  19. 用PHP写了个 标签 按点击率的 字体大小和颜色的 显示效果
  20. 部门 2016 总结

热门文章

  1. PHP CLI模式 - 执行代码
  2. 阿里云视频上传到抖音服务器
  3. iOS 键盘限制输入内容限制、输入长度限制
  4. 最近 火火火火 的 GitHub 项目!
  5. Unity——两种进度条的制作
  6. 旷视深度学习框架MegEngine开源
  7. CentOS 7.6 编译安装最新版本glibc2.30 实录
  8. 3060ti配什么cpu和主板
  9. 【正点原子Linux连载】第六十七章 Linux USB驱动实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
  10. [iOS][转]iOS 架构模式 - 简述 MVC, MVP, MVVM 和 VIPER (译)