.Net预览_第1页
.Net预览_第2页
.Net预览_第3页
.Net预览_第4页
.Net预览_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.NET 预览,本讲 结构,.NET概论 定义 目的 意义 .NET体系结构 公共语言运行时 通用类型系统 公共语言规范 垃圾收集 公共语言基础结构 中间语言 可移植执行体 CLR上PE扩展 程序集(Metadata) 反射 应用程序域(Application Domain) 安全性(Security) .NetFramework类库,.NET 概论,NET 是 Microsoft XML Web Services 平台。XML Web Services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。 Microsoft .NET 平台提

2、供创建 XML Web Services 并将这些服务集成在一起之所需。对个人用户的好处是无缝的、吸引人的体.NET是连接信息、人、系统和设备的一套软件技术。 .NET它是微软的新一代技术平台,你可以在这个平台上面创建任何类型的应用系统:传统的Windows桌面应用,Web应用,Office 应用,移动应用,智能设备应用,等等。,定 义,微软的定义:.NET = 新平台 + 标准协议 + 统一开发工具.NET作为新一代互联软件和服务战略,将使微软现有的软件在网络时代不仅适用于传统的个人计算机,而且能够满足呈现强劲增长的新设备的需要 。 微软总裁兼首席执行官Steve Ballmer把它定义为:

3、.NET代表一个集合,一个环境,一个可以作为平台支持下一代Internet的可编程结构。,.Net 目的,提供一个一致的面向对象的编程环境,而无论对象代码是在本地存储和执行,还是在本地执行但在 Internet 上分布,或者是在远程执行的。 提供一个将软件部署和版本控制冲突最小化的代码执行环境。 提供一个可提高代码(包括由未知的或不完全受信任的第三方创建的代码)执行安全性的代码执行环境。 提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。 使开发人员的经验在面对类型大不相同的应用程序(如基于 Windows 的应用程序和基于 Web 的应用程序)时保持一致。 按照工业标准生成所有通信,

4、以确保基于 .NET Framework 的代码可与任何其他代码集成。,.Net 最终目的,.NET就是让用户在任何地方、任何时间,以及利用任何设备都能访问所需的信息、文件和程序。用户不需要知道这些文件放在什么地方,只需要发出请求,然后只管接收就可以了。而所有后台的复杂性是完全屏蔽起来的。,.Net意义,最终用户 对于开发人员 .Net对IT专业人员的重要意义 .Net对企业的重要意义,最终用户,Microsoft .Net的策略是将互联网本身作为构建新一代操作系统的基础,对互联网和操作系统的设计思想进行合理延伸。 .Net对最终用户来说非常重要,因为计算机的功能将会得到大幅度提升,同时计算机

5、操作也会变得非常简单。特别地,用户将完全摆脱人为的硬件束缚:用户可以自由冲浪于互联网的多维时空,而不是束缚在便携式电脑的方寸空间可通过任何桌面系统、任何便携式电脑、任何移动电话或PDA进行访问,并可对其进行跨应用程序的集成。 .Net可使用户轻松进行互联网连接,并轻松完成那些在当今看来十分费时而且费力的事务,它们往往要求用户进行数据重输入并需运行几个小时才能完成。通过将多项安全数据流合并到单一的用户界面(或者甚至是可编程决策引擎),.Net架构将用户从充斥于当今Web的数据竖井的束缚中解脱出来。用户可以自由访问、自由查看、自由使用他们的数据。,对于开发人员,一组用于创建互联网操作系统的构建块,

6、其中包括passport.Net(用于用户认证)以及用于文件存储的服务、用户首选项管理、日历管理以及众多的其它任务 构建和管理新一代服务的基本结构和工具,包括Visual Studio.Net、.Net企业服务器、.Net框架和Windows.Net 能够启用新型智能互联网设备的.Net设备软件 .Net用户体验,.Net对IT专业人员的重要意义,.Net Enterprise Servers和Windows 2000操作系统,为创建具有高度可管理性的、能迅速投入市场的应用程序提供了坚实基础。它们利用的是可扩展标记语言(Xml),因此随着Web体系结构的革新,在此平台上创建的程序依然很有价值。

7、 .Net平台的核心是,采用有效的、分门别类的方式来构建应用程序,达到其前所未有的规模。该平台上的Web服务模型指的是:企业应用程序的中心业务要素通常由本地管理,而支持它们的服务(如用户认证、文件存储、用户首选项管理、日历、邮件等等)却无须本地管理,可以被无缝订购。为了存储用户文件和邮件,IT专业人员往往在服务器上安装新的独立磁盘冗余阵列(Raid阵列),而有了.Net,他们在这一方面将会花费较少的精力,而更多地致力于怎样为公司增加效益。 该Web服务模型还将动态配置新软件的发布和更新。用户将以极其紧密的连接方式工作,因此更易于管理。而简化的管理又可使IT专业人员更能适应变幻莫测的业务需求。

8、开发应用程序的.Net Web服务模型将为企业应用程序的创建开辟一条新路。通过企业内外多种服务的联合,很容易把企业内部数据和客户及合作伙伴的相关数据结合在一起,大大简化了应用程序的创建过程。这就为最终用户发掘了空前的功能涵盖性。,.Net对企业的重要意义,人与计算机进行交互的手段极为有限通常使用键盘和鼠标进行输入,使用监视器监控输出。 用户信息基本上是本地信息;如果从另一台机器进行登录,则无法获取用户的个人首选项设置、数据及应用程序。 用户必须亲自处理信息,而通过设置智能选项代表用户自动进行操作,则无异于是纸上谈兵。 同一用户存放于不同应用程序和站点的数据,很难(或根本不可能)进行自动合并和关

9、联,用户无法统一进行查看。 想在家里或在路上工作的用户,不能方便地访问办公室电脑中的应用程序和数据。这无疑成为一道阻止人们获得更高工作效率的鸿沟。 不能使用其它设备访问专为特定设备设计的数据(这些设备包括PC、寻呼机、移动电话以及PDA等);最多可以定期进行同步。 .Net将保证完全消除当今计算技术中的所有缺陷。.Net定能实现确保用户从任何地点、任何设备都可访问其个人数据和应用程序的宏伟蓝图。除此之外,.net技术还可实现多个应用程序在逻辑上的松散耦合链接和紧密耦合链接。,微软的努力,微软便逐步调整其服务器软件的产品线,将原有的Server一一的升级更新,推出了许多新的Server Comm

10、erce Server 2000用于快速创建在线电子商务。 Mobile Information Server 为移动解决方案提供可靠而且具有伸缩性的平台。 .NET Framework - 智能终端实现跨平台(设备无关性)的执行环境 Visual Studio .NET 建立并集成Web Services和应用程序的快速开发工具 Microsoft Windows Server 2003 新一代的企业服务器,用于提供建立和发布各种解决方案 Microsoft Office Professional Edition 2003 内建的工具集也能帮助开发智能终端 Microsoft Applica

11、tion Center 2000 - 配置和管理Web应用程序 Microsoft BizTalk Server 2002 - 建立基于XML的跨应用和组织的商业逻辑 Microsoft Commerce Server 2002 能够迅速建立大规模电子商务的解决方案 Microsoft Content Management Server 2002 管理动态电子商务网站的目录 Microsoft Exchange Server 2000 用于进行随时随地的通讯协作 Microsoft Host Integration Server 2000 用于和主机系统之间传输数据 Microsoft Int

12、ernet Security and Acceleration Server 2000 (ISA Server) internet连接 Microsoft Mobile Information Server 2002 用于支持手持设备 Microsoft Operations Manager 2000 描述企业级解决方案的操作管理 Microsoft Project Server 2002 - 提供项目管理的最佳方案 Microsoft SharePoint Portal Server 2001 查询、共享、发布商业信息 Microsoft SQL Server 2000 企业级数据库,.NE

13、T体系结构,.NET体系由公共语言运行库(Common Language Runtime简称CLR) .NET Framework类库所构成。,CLR与系统的关系,公共语言运行时,.NET Framework 的基础 .NET Framework 的核心执行境,也称为.NET运行库, 主要负责托管代码的编译和运行。 自动内存管理 调试支持 增强的安全性 与非可操控性代码的互操作性 代码管理的概念是公共语言运行库的基本原则。 以公共语言运行库为目标的代码称为托管代码,而不以公共语言运行库为目标的代码称为非托管代码。,CLR代码编译过程,把源代码编译为Microsoft中间语言(IL) CLR把I

14、L编译为平台专用的代码,托管代码的优点,平台无关性 源代码先编译成中间语言,运行时由CLR将中间语言编译成平台专用的代码,跟Java的字节代码一样,这样即可实现平台无关性。 提高性能 首先,IL比Java的字节码作用还要大,因为IL是即时编译的,而Java的字节码常常是解释性的,在转换为平台可执行代码的时候可能会导致性能损失。其次,.NET的即时编译器(JIT)(Just In Time)并非一次把全部代码编译完才执行,而是只编译调用的那部分代码,并把得到的这部分内部可执行代码保存起来,下次需要调用的时候无须重新编译。Microsoft认为这个过程要比一开始编译整个应用程序代码的效率高得多,因

15、为任何程序的大部分代码实际上并不是在每次运行过程中都执行。最后,传统的编译器会优化代码,但它们的优化过程是独立于代码所运行的特定处理器的。例如Visual Studio 6优化了一台一般的Pentium机器,它所生成的代码就不能利用Pentium 处理器的硬件特性。而JIT与平台无关,所以它可以针对不同的机器完成不同的优化。 语言的互操作性 互操作性即能将任何一种语言编译为中间代码,编译好的代码可以与从其它语言编译过来的代码进行交互操作。在.NET中可以交互操作的语言有C#、VB.NET、Visual C+.NET、Visual J#、脚本语言、COM和COM+。,通用类型系统,Common

16、Type System简称CTS CTS定义了可以在中间语言中使用的预定义数据类型,所有面向 .NET Framework的语言都可以生成最终基于这些类型的编译代码。 通用类型系统指定了基本数据类型, 定义丰富的类型层次结构,其中包含设计合理的位置,在这些位置上,代码允许定义它自己的类型。 通用类型系统的层次结构反映了中间语言的单一继承的面向对象的方法。,通用类型系统,通用类型层次图,公共语言规范,Common Language Specification简称CLS 和通用类型系统一起确保语言的互操作性。 CLS是一个最低标准集,所有面向.NET的编译器都必须支持它。因为IL是一种内涵非常丰富

17、的语言,大多数编译器的编写人员有可能把给定编译器的功能限制为只支持IL和CLS提供的一部分特性。只要编译器支持已在CLS中定义的内容,这就是很不错的。 CLS是CTS一个子集,CTS CLS 和各个语言的关系图,图一是标准符合CTS 图二大致符合,图一,图二,中间语言,Intermediate Language简称IL 平台无关本机代码 MSIL 使用 NET支持的语言所编写的代码JIT编译MSIL(Microsoft Intermediate Language)微软的中间语言。和JAVA的虚拟机类似,是与CPU无关的指令集。 当编译为托管代码时,编译器将源代码翻译为MSIL, MSIL 包括

18、用于加载、存储和初始化对象以及对对象调用方法的指令,还包括用于算术和逻辑运算、控制流、直接内存访问、异常处理和其他操作的指令。在可以执行代码前,必须将 MSIL 转换为 CPU 特定的代码,这通常是通过实时 (JIT) 编译器完成的。 由于公共语言运行库为它支持的每种计算机结构都提供了一种或多种 JIT 编译器,因此可以在任何受支持的结构上对同一组 MSIL 进行 JIT 编译和执行。 中间语言是一组独立于CPU的指令集,它可以被即时编译器Jitter翻译成目标平台的本地代码。,公共语言基础结构,Common Language Infrastructure 简称CLI 2005年6月,.NET

19、 CLI(第3版)正式成为ECMA标准ECMA-335(第3版),第3版.NET CLI对应.NET Framework 2.0。 了解第3版.NET CLI对了解.NET Framework 2.0内核有重要意义 第2版.NET CLI于2002年发布,对应.NET Framework 1.0 第3版.NET CLI对应.NET Framework 2.0。 对比第2版.NET CLI和第3版.NET CLI,可以发现第3版.NET CLI添加的内容,最重要的就是对泛型(参数化的类型,Generics)的支持,这与.NET Framework 2.0的底层.NET CLR 2.0添加的最重要

20、内容是一致的。,.NET CLI,.NET CLI是.NET公共语言基础结构(.NET Common Language Infrastructure)的缩写,.NET Framework基于.NET CLI。 .NET CLI文档中对.NET CLI的定义是:.NET CLI定义了一个公共语言基础结构,在公共语言基础结构中,各种不同的高级语言开发的应用程序,无需修改程序以适应不同的系统环境特有的特性,就可以在不同的系统环境下运行。,.NET CLI 特性,有跨平台性,“不同的系统环境”实际上就是不同的硬件和软件平台(包括操作系统),理论上说,在任何硬件和软件平台上,只要实现.NET Frame

21、work,就可以不加修改地运行任何.NET应用程序,而无需考虑平台自身的特性。 .NET Framework还可以支持多种高级语言(跨语言性),任何.NET编程语言,即.NET平台支持的高级语言,开发的应用程序在.NET Framework上是等价的,都可以在.NET Framework上运行。 无论商业的炒作如何进行,系统底层程序员应该保持清醒的头脑,从.NET Framework的基本特性看来,通常被称为.NET CLR(.NET公共语言运行时,.NET Common Language Runtime)的.NET Framework底层,本质上一定是类似于Java虚拟机(Java VM)的

22、虚拟机,.NET CLR执行的代码一定也是一种虚拟机代码或者中间代码,否则.NET Framework不可能实现跨平台,特别是适应不同的硬件平台。因为不同的硬件平台,CPU的指令集可能是不同的,只有通过虚拟机将中间代码在运行时动态转换为CPU指令集支持的本机代码,才能实现中间代码在不同硬件平台上的同样执行,进而实现适应不同的硬件平台。 .NET Framework可以支持多种.NET编程语言,这意味着:任何.NET编程语言的源程序最终都编译成相同的中间代码,也就是可以在.NET CLR(虚拟机)上运行的虚拟机代码。,.NET CLI .NET CLI包含的内容,概念和体系结构:描述.NET C

23、LI的全部体系结构,提供公共类型系统(CTS,Common Type System)、虚拟执行系统(VES,Virtual Execution System)和公共语言规范(CLS,Common Language Specification)的标准化描述,还提供对元数据(Metadata)的信息性描述。 元数据的定义和语义:提供元数据的标准化描述,包括元数据在.NET扩展PE文件格式中的位置(以.NET扩展PE文件格式的形式表示),元数据的逻辑内容(以表格及其关联的集合的形式表示,实际上使用了形式化方法表示)和元数据的语义(以汇编成为虚拟机代码的汇编器ilasm理解的形式表示)。 CIL指令集

24、:描述公共中间语言(CIL,Common Intermediate Language)指令集。CIL又称MSIL(微软中间语言,Microsoft Intermediate Language),CIL指令就是虚拟机代码或者中间代码的指令。 Profile和库:提供CLI库的简要介绍,以及将其分解为Profile和库的规范。 “Profile”一词在这里的含义是库的集合,一起组合起来构成提供一定功能级别的一致性整体,换而言之,不同的Profile对应不同的库集合,提供的功能级别也不同,“Profile”一词亦可翻译成“库概要”或者“库配置”,但切勿翻译成“配置文件”。 调试交换格式:可交换(.N

25、ET CLI通用)调试信息的格式。 附件,.NET CLR与Java VM的异同,.NET CLR的本质和Java VM类似,都是虚拟机,这与Microsoft声称.NET Framework可以跨平台是对应的。但是.NET CLR并不强调100的平台无关性,托管执行的本质只是元数据驱动执行,尽管类型中方法的实现一般都使用CIL代码,例如C#和VB.NET的编译器只生成CIL代码,但不排除使用本机代码,例如Visual C+.NET的编译器可以生成同时包含CIL代码和本机代码的可执行文件,本机代码显然是平台相关的。 .NET Framework中,很多.NET框架类库的实现只是一种对Windo

26、ws平台的包装,最终调用的还是Windows API或者Windows相关服务,例如企业服务(Enterprise Services)最终调用COM+企业组件服务。.NET框架类库是.NET应用程序调用的API,显然,使用了上述.NET框架类库的.NET应用程序是不可能离开Windows平台的。 .NET应用程序还可以直接调用Windows API,直接调用Windows API的.NET应用程序更不可能离开Windows平台。 可见Microsoft并不把跨平台作为.NET Framework追求的首要目标,.NET CLR是和Windows平台甚至硬件平台协同工作的,而Java VM的目标

27、则是实现完全的跨平台,在各种硬件和软件平台上都有Java API的独立实现,可见二者的设计首要目标并不相同。 所以.NET CLR称为“Runtime(运行时)”,而Java VM称为“Virtual Machine(虚拟机)” .NET CLI定义的只是.NET Framework的子集,仅此而已。,通用语言构造基础的实现,.NET Framework 3.0,Windows Vista(Windows NT 6.0)将于2006年年底到2007年年初的时间正式发布,Windows Vista中包含了.NET Framework 3.0。 .NET Framework 3.0是WinFX正式

28、发布时的称呼,.NET Framework 3.0提供了4个全新的子系统,对于程序员来说可以认为是4组全新的API,还包括全新的程序设计体系结构,它们分别是: 图形用户界面子系统WPF(Windows表示层基础,Windows Presentation Foundation) 安全体系CardSpace 网络服务通信子系统WCF(Windows通信基础,Windows Communication Foundation) 工作流子系统WF(Windows工作流基础,Windows Workflow Foundation) 实际上.NET Framework 3.0的核心仍然是.NET Frame

29、work 2.0,其底层仍然是.NET CLR 2.0,因此.NET Framework 3.0的发布对系统底层程序员的冲击相对比较小。从.NET Framework 3.0的核心仍然是.NET Framework 2.0看来,Microsoft无法放弃Windows API时代的大量资源,包括COMCOM+、DirectX等,.NET Framework在一段时期内仍然不会完全取代Windows API,系统底层程序员仍然大有可为。,可移植执行体,Portable Executable简称PE Windows NT 3.1引入了一种名为PE文件格式的新可执行文件格式。 Windows NT为

30、开发环境和应用程序本身带来了很大的改变,这之中一个最为重大的当属PE文件格式了。新的PE文件格式主要来自于UNIX操作系统所通用的COFF规范,同时为了保证与旧版本MS-DOS及Windows操作系统的兼容,PE文件格式也保留了MS-DOS中那熟悉的MZ头部。,PE 文件简介,许多单独的文件成分定义都来自于Microsoft Win32 SDK开发包中的WINNT.H文件,在这个文件中你会发现用来描述文件头部和数据目录等各种成分的结构类型定义。但是,在WINNT.H中缺少对PE文件结构足够的定义。 PE文件格式应用于所有32位Windows系统:Windows 9X, Windows NT,W

31、indows 2000及Windows XP(Vista已经对PE格式进行了升级,也出现了PE64),而在MSDN 98中有PE的大量详细资料(按目录:MSDN Library Visual Studio 6.0 | Specification | Platforms | Microsoft Portable Executable and Common Object File Format Specification)。,PE 文件结构,PE文件内容被分割为不同的区段(Section),每一区段中可能包含代码或数据。各区段按页边界对齐,区段没有大小限制,是一个连续结构。每一个区段在内存中都有它

32、自己的一套属性,比如:这个区段是否包含代码、是否只读或可读/写等。每一个区段都有不同的名字,这个名字用来表示区段的功能。例如: .text 是在编译或汇编结束时产生的一种块,它的内容全是指令代码; .rdata 是运行期只读数据; .data 是初始化的数据块; .idata 包含其它外来DLL的函数及数据信息,即导入表; .rsrc 包含模块的全部资源,如图标、菜单、位图、对话框等。 Note:使用区段名只是方便人们使用,而对操作系统来说是无关紧要的,因此可将上面区段名任意更改而不会影响PE文件执行。,PE 文件结构,PE文件非常好的一个特性是其在磁盘上的数据结构与在内存中的结构是一致的。在

33、X86系统中,每个内存页大小为4KB(即0 x1000字节)。所以,在X86系统中,PE文件区段(Section)的内存对齐值一般是0 x1000,在内存中的每个区段的起始地址为0 x1000的倍数。而磁盘PE文件对齐值一般为0 x200(即512字节,扇区块大小),所以PE文件中每个区段的起始地址为0 x200的倍数。在磁盘PE文件中,区段间的间隙用0 x00来填充。由于PE文件在磁盘和在内存中的对齐值不同,所以往往所占用的空间也不相同(在内存中往往占用更多空间)。磁盘上的PE文件和加载进内存中的PE文件,PE 文件结构图一,PE 文件结构图二,PE 文件结构图三,CLR上PE扩展,Wind

34、ows PE与 .NET PE,Windows PE 是由操作系统执行的 .NET PE 却被转变成为.NET Framework的CLR. 识别一个PE是 .NET还是Windows取决于他的通用的目标文件格式 (COFF) 是否使用Windows的操作系统. 目标文件格式 (COFF) 指定了任何文件都分成两个部分:文件数据本身以及描述文件内包含的数据内容的头文件串。 MSIL 汇编程序从 MSIL 汇编语言生成可移植可执行的 (PE) 文件。可以运行结果可执行文件(该文件包含 MSIL 和所需的元数据)以确定 MSIL 是否按预期执行。,PE文件加载过程,当PE文件被执行,PE装载器检查

35、DOSMZheader里的PEheader偏移量。如果找到,则跳转到PEheader。 PE装载器检查PEheader的有效性。如果有效,就跳转到PEheader的尾部。 紧跟PEheader的是节表。PE装载器读取其中的节信息,并采用文件映射方法将这些节映射到内存,同时付上节表里指定的节属性。 PE文件映射入内存后,PE装载器将处理PE文件中类似importtable(引入表)逻辑部分。,.NET PE执行过程,Windows的可执行程序载入器(OS Loader)载入PE (Portable Executable)结构的可执行文件映像(PE Image)以及其他的DLL(.NET动态连接库

36、) ,将执行权传递给CLR的支持库中的Unmanaged Code。 启动或使用现有的CLR引擎,建立新的应用域(Application Domain),将配件(Assembly)载入到此应用域中。 将执行权从Unmanaged Code传递给Managed Code,执行配件的代码。 程序的执行过程中,GC(垃圾收集器)负责内存的分配,释放等管理功能。 程序执行完毕,操作系统卸载应用程序,Net加载流程图,元数据(Metadata),为了使运行时环境可以向可操控代码提供服务,语言编译器需要产生一种元数据,它将提供在使用语言中的类型、成员、引用的信息。运行时环境使用元数据定位并载入类,在内存中

37、展开对象实例,解决方法调用,产生本地代码,强制执行安全性,并建立运行时环境的边界。 metadata翻译成中文是“元数据”,能够理解为type of type,说白了就是描述类型的类型数据,metadata在pe中的组织结构,clr的头信息里面专门有一个字段指向metadata数据块,实际上这个数据块只是metadata的一个头结构,保存有metadata的信息,而metadata的实际数据,是通过若干不同的heap或说stream保存的。,反射,因为程序集存储了元数据,包括在程序集中定义的所有类型和这些类型的成员的细节,所以可以编程访问这些元数据,这个技术称为反射。,应用程序域,Applic

38、ation Domain 应用程序域是.NET中的一个重要技术改进,它用于减少运行应用程序的系统开销,这些应用程序需要与其他程序分离开来,但同时还需要彼此通信。 举个例子是Web服务器应用程序,它需要同时响应许多浏览器请求。因此,要有许多组件实例同时响应这些同时运行的请求。在.NET没有开发出来前,可以让这些实例共享同一个进程,但此时一个运行的实例就有可能导致整个网站的崩溃;也可以把这些实例孤立在不同的进程中,但这样做会增加相关性能的系统开销。,Windows 进程,Windows 进程,在运行一个新的应用程序时,它会在一个进程环境内运行。Windows通过地址空间把进程分隔开来。这样,每个进

39、程有4GB的虚拟内存来存储其数据和可执行代码(4GB对应32位系统),虚拟内存映射到物理内存,物理内存不能有重叠。 任何进程都只能通过指定虚拟内存中的一个地址来访问内存即进程不能直接访问物理内存,因此一个进程不可能访问分配给另一个进程的内存 。 进程不仅是运行代码的实例相互隔离的一种方式,在Windows NT/2000/XP/2003系统上,它们还可以构成分配了安全权限和许可的单元。每个进程都有自己的安全标识,明确地表示Windows允许该进程可以执行的操作。进程对确保安全有很大的帮助,而它们的一大缺点是性能。 这对性能有非常大的影响。如果需要使组件一起工作,但不希望性能有损失,惟一的方法是

40、使用基于DLL的组件,让所有的组件在同一个地址空间中运行 其风险是执行出错的组件会影响其他组件。,应用程序域,应用程序域是分离组件的一种方式,它不会导致因在进程之间传送数据而产生的性能问题。其方法是把任何一个进程分解到多个应用程序域中,每个应用程序域大致对应一个应用程序,执行的每个线程都运行在一个具体的应用程序域中 。 如果不同的可执行文件都运行在同一个进程空间中,显然它们就能轻松地共享数据,因为理论上它们可以直接访问彼此的数据。 虽然在理论上这是可以实现的,但是CLR会检查每个正在运行的应用程序的代码,以确保这些代码不偏离它自己的数据区域,保证不发生直接访问其他进程的数据的情况。 实际上,这

41、么做通常是可能的,因为中间语言拥有强大的类型安全功能。在大多数情况下,除非代码明确使用不安全的特性,例如指针,否则它使用的数据类型可以确保内存不会被错误地访问。例如,.NET数组类型执行边界检查,以禁止执行超出边界的数组操作。如果运行的应用程序的确需要与运行在不同应用程序域中的其他应用程序通信或共享数据,就必须调用.NET的远程服务。 被验证不能访问超出其应用程序域的数据(而不是通过明确的远程机制)的代码就是内存类型安全的代码,这种代码与运行在同一个进程中但应用程序域不同的类型安全代码一起运行是安全的,应用程序域图,程序集,程序集(assembly)是包含编译好的、面向.NET Framework的代码的逻辑单元。 程序集是完全自我描述性的 程序集包含的元数据描述了对应代码中定义的类型和方法 程序集也包含描述程序集本身的元数据这种程序集元数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论