处置(dispose)和定稿(finalize)的区别

在编程语言中,对象在存在期间只能有变量,实例化后不能修改。因此不能将同一个内存单元分配给新值,因此需要某种自动内存管理来管理未使用的空间。这些未使用的空间称为垃圾,有效内存管理的整个过程称为垃圾收集。...

在编程语言中,对象在存在期间只能有变量,实例化后不能修改。因此不能将同一个内存单元分配给新值,因此需要某种自动内存管理来管理未使用的空间。这些未使用的空间称为垃圾,有效内存管理的整个过程称为垃圾收集。

垃圾收集器的主要目标是将死的对象与活的对象分开,并回收空间以供重用。基本上,整个过程都是在托管堆上进行的,托管堆只不过是一个内存块,垃圾收集器会定期检查堆内存以将内存分配给新对象。释放非托管资源(如文件和数据库连接)有两种方法:Dispose和Finalize。

本文有助于您理解两者之间的区别。

处置(dispose)和定稿(finalize)的区别

什么是处置方法(a dispose method)?

Dispose是一种标准的方法,用户可以告诉对象释放资源,不要再次尝试访问对象。dispose方法通过使对象不可用来控制显式内存清理。

当用户调用Dispose()方法时,对象应该释放所有昂贵的资源,从而使其可重用。它从不被垃圾收集器调用,垃圾收集器只在托管内存不足时才会调用。一个名为“IDisposable”的特殊接口用于决定在何处以及如何实现Dispose()。但是当dispose方法没有被调用时会发生什么呢?

 

处置(dispose)和定稿(finalize)的区别

什么是定案方法(a finalize method)?

如果没有调用dispose方法,则回退计划是使用Finalize()方法进行清理。垃圾回收器调用它,在释放内存之前执行最终的资源清理。及时清理的概念在这里变得不适用,因为不是立即取消分配内存,而是将对象添加到终结队列中,然后销毁。Finalize更像是在发生编程错误时设置的一种保护措施,而dispose不会清理资源,在这种情况下,垃圾收集器将调用Finalize()方法以按其喜欢的顺序删除无法访问的对象。

 

dispose和finalize之间的区别

dispose和finalize的基础知识

调用Dispose方法可加快非托管资源(如数据库句柄、文件句柄、信号量和操作系统分配的其他对象)的释放。dispose方法被调用来执行清除未使用的内存和稀缺资源(如GDI句柄)所需的代码。简单地说,dispose方法提供了显式内存清理的控制。另一方面,Finalize方法是垃圾收集的一部分,用于在对象被垃圾收集之前对其执行最终清理操作。简单地说,finalize方法被调用以在对象被销毁之前释放对象所持有的非托管资源。

调用dispose和finalize

Dispose方法可以由用户代码和实现该方法以释放资源的类显式调用。但是,在垃圾收集器执行清理过程之前,无法释放内存。即使对象的其他引用仍然存在,也可以调用该方法。相反,finalize方法只能在垃圾回收器确定最后一个内存对象实例已销毁并且不再存在对该对象的引用之后才能被调用。finalize方法执行后,对象将从堆内存中移除。

实施处置和定案

从内存中处理对象的过程称为dispose模式,该模式可用于访问非托管资源的对象,因为垃圾收集器无法回收非托管资源。实现“IDisposable”接口以及附加的Dispose(布尔)方法,要求释放非托管资源。finalize方法在对象的实例在释放之前被销毁时执行。它是一种不确定的方法,由垃圾收集器自行决定,甚至可能不会发生。除非非常必要,否则不应在托管对象上实现它。

执行处置和定案

使用dispose方法比使用finalize来即时处理对象要快得多。析构函数在运行时自动转换为finalize方法。当对象超出作用域时,垃圾收集器会自动调用它,这通常发生在该对象的实例被销毁时。finalize方法的问题是它是不确定的,这意味着它不确定何时回收不再通过垃圾收集引用的内存。但是,它可能不会立即释放内存;事实上,它可能永远不会被调用,也不能被显式地强制。

处置与最终确定:比较图

处置(dispose)和定稿(finalize)的区别

 

总结 - 处理(of dispose) vs. 定稿(finalize)

dispose和finalize方法的主要区别在于前者是一种确定性方法,当对象不再使用时,它会立即对其进行处理,后者是一种分配非托管资源的非确定性方法,这意味着它是一种在内存对象实例在释放前超出作用域时释放内存对象实例的后备方法。除非非常必要,否则最好在finalize上使用dispose方法。

换句话说,finalize是一种保护措施,用于在发生编程错误时无法调用dispose方法时清理非托管资源。Finalize方法在对象即将从堆内存中踢出时由垃圾收集器调用。

  • 发表于 2021-06-25 14:55
  • 阅读 ( 139 )
  • 分类:IT

你可能感兴趣的文章

处置()(dispose ())和完成()(finalize ())的区别

...较-以表格形式显示dispose()与finalize() 6. 摘要 什么是处置()(dispose())? NET framework最重要的优点之一是它提供自动垃圾回收。它会自动释放未使用对象的内存。在C语言和C++语言中,程序员必须自己处理内存管理。但在C等语...

  • 发布于 2020-10-18 23:21
  • 阅读 ( 187 )

最终决赛(final finally)和用java完成(finalize in java)的区别

...以确保方法的功能永远不会被更改。 图01:最终、最终和定稿 也可以对类使用final关键字。新类不能继承final类的变量和方法。这有助于提高安全性。由于类被子类阻止使用,所以数据受到保护。 什么是最后是java(finally in java)?...

  • 发布于 2020-10-19 15:24
  • 阅读 ( 237 )

处理对象

...中,我们将查看IDisposable界面。。。需要在自己的代码中处置非托管对象时使用的接口。 如果您为自己的使用非托管资源的对象编写代码,则应该为该对象使用IDisposable接口。Microsoft通过包含一个代码片段为您创建正确的模式...

  • 发布于 2021-09-11 23:51
  • 阅读 ( 216 )

如何我可以安全地处理电子垃圾吗?(i safely dispose of e-waste?)

...越多的消费者意识到电子废物是一种危险物质,需要小心处置。电子垃圾包括计算机设备、电视、手机和其他电子设备。许多消费者发现购买新的比升级更便宜,而且他们经常发现自己丢弃了非常好的设备,而其他人则丢弃了真...

  • 发布于 2021-12-06 14:51
  • 阅读 ( 179 )

如何我可以处理电池吗?(i dispose of batteries?)

... 当电池停止工作时,应将其取出并妥善处置,以避免伤害或损坏电子设备。某些类型的电池应回收或交给处理危险废物的机构。您应该确定您拥有的电池类型,以确保以适当的方式处置电池。将废旧电池分开也...

  • 发布于 2021-12-07 09:14
  • 阅读 ( 119 )

如何我处理我的旧手机?(i dispose of my old cell phone?)

...里之前,请三思。实际上,有很多方法可以安全、慈善地处置您不再使用的手机。首先,你应该意识到,在很多地方,丢弃手机实际上是违法的,因为电池——特别是非常旧的手机——可能含有有毒金属。有比你的垃圾桶更好的...

  • 发布于 2021-12-07 10:39
  • 阅读 ( 198 )

什么是处理电脑显示器的不同方法?(the different ways to dispose of a computer monitor?)

...子废物回收中心,在那里提取可重复使用的元素,并安全处置危险部件。‭ ‬另一种方法是找到一家制造商,该制造商将整修该装置以供继续使用。‭ ‬最后‭ ‬有些废物处理公司会以不会向环境中释放有害物质的方式销毁监...

  • 发布于 2021-12-09 10:14
  • 阅读 ( 117 )

什么是正确的电子处理方法?(the proper method of electronic disposal?)

... 妥善处置电子产品的方法包括将设备捐赠给慈善机构、将其出售给回购中心或将其送往回收中心。环境和卫生机构建议采取任何措施防止废旧电子产品(通常称为电子垃圾)进...

  • 发布于 2021-12-15 12:26
  • 阅读 ( 89 )

什么是处理电路板的最佳技巧?(the best tips for circuit board disposal?)

...,而这些组件最终不需要填埋。当涉及到负责任的电路板处置时,有几种选择,包括回收、返回制造商和出售旧电路板。。 ...

  • 发布于 2022-01-01 00:54
  • 阅读 ( 112 )

什么是船舶处置的不同方法?(the different methods of ship disposal?)

... 船舶一旦达到使用寿命,必须妥善处置。这一船舶处理过程可以通过多种方式完成,尽管有些方法比其他方法更安全、更清洁。拆船可能是最被接受的船舶处置方法;这一过程包括将船一块一块地分解,以...

  • 发布于 2022-01-07 10:41
  • 阅读 ( 70 )
苦咖啡喝多了
苦咖啡喝多了

0 篇文章

相关推荐