NET框架程序设计(上).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译MSIL 如果使用JIT编译,则只有那些被调用的方法才会进行编译。如果程序集中的方法已加载,但是从未使用过,则它将仍保持其MSIL形式。 注意:编译后的本机代码不会存回到磁盘上,每次加载程序集时都要执行JIT编译过程。 NET框架程序设计(上)全文共143页,当前为第128页。 垃圾回收 托管堆在 .NET Framework 应用程序的执行过程中扮演着重要的角色。引用类型(如每个类、每个字符串等)的每个实例都是在堆上分配的,当有应用程序不断地运行时,分配到堆的内存可能会被填满,因此在可以创建新的实例之前,必须使更多空间可用。使空间可用的过程称为垃圾回收,将释放未使用的对象。 NET框架程序设计(上)全文共143页,当前为第129页。 垃圾回收 当CLR注意到堆已填满时,它将自动运行垃圾回收器(应用程序也可以显式请求运行垃圾回收器,但是这并不是特别常见的做法)。若要了解垃圾回收的工作方式,请再次思考引用类型的分配方式。每个引用类型在堆栈上都有一个指向其在堆中的实际值的条目,如图3.9所示,堆栈包含十进制数值32.4,一个引用代表字符串“Hello”,整数值14,以及一个引用代表“被装箱的整数值169”,两个引用类型(字符串和被装箱的整数值)其值都存储在堆上。 NET框架程序设计(上)全文共143页,当前为第130页。 垃圾回收 图3.9堆上由X类的对象所占据的空间为垃圾 NET框架程序设计(上)全文共143页,当前为第131页。 垃圾回收 但是应该注意,堆中还包含着X类的对象的信息。图3.9并不是按比例绘制的,所以此对象占据的空间可能比字符串或装箱整数多得多;也许此对象是由已经完成执行的方法创建的,因此从堆栈指向它的引用现在已经消失。不管怎样,此对象正占据着可作它用的空间,换言之,它就是垃圾。 NET框架程序设计(上)全文共143页,当前为第132页。 垃圾回收 图3.10 垃圾回收 NET框架程序设计(上)全文共143页,当前为第133页。 垃圾回收 如此例所示,长期存在的对象随着时间的推移被移至堆的某一端。在实际应用中,最新分配的对象最快变成垃圾的情况相当常见,在查找垃圾时,可以先查找堆中最新分配的对象。CLR的垃圾回收器也正是如此,它先检查这些最新一代的对象,然后回收由垃圾占据的任何空间;如果这一轮操作后仍未能释放出足够的内存,则垃圾回收器将检查前一代对象,也就是稍早一些分配的那些对象;如果仍然未能释放足够的空间以满足当前需求,则回收器将检查托管堆中的所有剩余对象,释放不再使用的任何空间。 NET框架程序设计(上)全文共143页,当前为第134页。 垃圾回收 堆上的每个对象都有一个称为终结器的特殊方法,但是,默认情况下,此方法不执行任何操作。如果类型需要在销毁之前执行某些最终清理操作,则创建该类型的开发人员可重写该类型的默认终结器。在释放带有终结器的对象之前,该对象将置于终结列表中,最终,此列表中的每个对象都将调用对应终结器。 NET框架程序设计(上)全文共143页,当前为第135页。 应用程序域 CLR是以DLL形式实现的,这使得CLR以一种常规的方式使用它。当然这也意味着还需要提供一个EXE来作为CLR的宿主。运行库宿主可提供此功能:加载并初始化CLR,然后通常将控制权转移给托管代码。ASP.NET 与SQL Server 2005、Internet Explorer及其他应用程序一样都提供了运行库宿主,Windows外壳程序也可充当运行库宿主,用于加载使用托管代码的独立可执行文件。 NET框架程序设计(上)全文共143页,当前为第136页。 应用程序域 运行库宿主在其进程内创建一个或多个应用程序域(Application Domain,也称为应用域),每个进程包含一个默认应用程序域,并且每个程序集都被加载到特定应用程序域中。应用程序域类似于传统的操作系统进程,将它所包含的应用程序与所有其他应用域中的应用程序相隔离,但是,因为多个应用域可共存于同一个进程之中,所以这些域之间的通信会更加有效。 NET框架程序设计(上)全文共143页,当前为第137页。 应用程序域 但是如何确保有效隔离应用域呢?如果没有操作系统所提供的对进程的内置支持,怎样保证同一进程的两个不同应用域中运行的应用程序不会相互干扰呢?答案仍是“验证”。因为托管代码在进行JIT编译时将进行类型安全检查,因此系统可以肯定没有程序集能够直接访问其各自边界之外的任何内容。 NET框架程序设计(上)全文共143页,当前为第138页。 应用程序域 可以有多种方法使用应用域。例如,ASP.NET在其自己的应用域内运行各个Web应用程序,这将使应用程序相互保持隔离,但是不会导致运行多个不同进程的开销;运行库宿

文档评论(0)

武松 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档