Net面向对象程序设计–14–使用垃圾回收和资源管理–2010–2011–2.ppt

Net面向对象程序设计–14–使用垃圾回收和资源管理–2010–2011–2.ppt

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Net面向对象程序设计–14–使用垃圾回收和资源管理–2010–2011–2

C# 无需太多的内存管理。这是因为 .NET Framework 垃圾回收器会隐式地管理对象的内存分配和释放。 但是,当应用程序封装窗口、文件和网络连接这类非托管资源时,应当使用析构函数释放这些资源。当对象符合析构时,垃圾回收器将运行对象的?Finalize?方法。 .NET面向对象程序设计 第14章 使用垃圾回收和资源管理 本章简介 使用GC 编写代码,用析构器终结一个对象时运行这些代码 编写try/finally语句 编写using语句 14.1 对象的生存期 对象的创建示例: Square mySquare=new Square(); 从开发人员的角度看,new是一个原子级的操作 在最底层,对象的创建实际分两步走: 首先,new操作必须从heap中分配一些原始内存,在创建对象阶段,你无法进行任何干涉 然后,new操作必须将那些原始内存转换成一个对象,它必须初始化对象,在构造器的帮助下,可以对这一阶段进行控制 创建对象后,可以使用.操作符访问它的成员 可以让其他引用变量引用同一个对象 销毁对象也分两步走 首先,runtime必须执行一些清理工作,在一个析构器destructor的帮助下,你可以对这一阶段进行控制 然后,runtime必须将之前被对象占有的内存归还给堆,对象的内存必须回收,同样,你对这一阶段仍然没有任何控制权 销毁一个对象,并将内存归还给堆的过程称为垃圾回收(garbage collection) * 示例: 01: using System; 02: 03: class Account 04: { 05: 06: } 07: 08: class Bank 09: { 10: private Account bankAccount; 11: 12: public void SetAccount (Account newAccount) 13: { 14: bankAccount = newAccount; 15: } 16: } 17: 18: class Tester 19: { 20: public static void Main() 21: { 22: Bank bank1; 24: Account account1; 25: Account account2; 27: account1 = new Account(); 29: account1 = null; 31: account1 = new Account(); 32: account2 = new Account(); 34: account1 = account2; 36: bank1 = new Bank(); 37: bank1.SetAccount(new Account()); 39: bank1 = null; 41: DoingAccountStuff(); 42: } 44: public static void DoingAccountStuff() 45: { 46: Account localAccount; 47: localAccount = new Account(); 48: } 49: } * 1、将null引用赋值给对象的所有引用 * 2、将一个表示对对象A的唯一引用的应用变量赋值给另一个不同的引用对象时,对象A被废弃 * 3、当对象A包含对象B的唯一引用时,若废弃对象A时,对象A和对象B都被废弃 4、当一个包含对某对象的唯一引用的本地变量越过作用域时,此对象就会被废除 14.1.1 编写析构器 使用析构器,可以执行对象被垃圾回收时需要执行的任何清理工作 析构器也是一个特殊的方法,只是runtime会在一个对象的最后一个引用消失后调用它 public static int InstanceCount() { return this.instanceCount; } ... private static int instanceCount = 0; } class Tally { public Tally() { this.instanceCount++; } ~Tally() { th

文档评论(0)

wuyoujun92 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档