GC是管理对象并完成对非托管对象这就是我一直在读。处置是隐含的敲定,则明确是什么,我一直在读。有人可以给我在这三个东西都被用于不同的原因之一模块的一个例子吗?

有帮助吗?

解决方案

GC是垃圾收集。它是自动内存管理,在托管堆中分配的对象来处理清理。在.NET GC采用了标记和清除算法。当垃圾回收时,它基本上认为在堆的部分全部被清洗物为可恢复的。然后,它通过标记处理,其中它扫描的根源。即它标识仍处于由应用程序使用的对象。做完剩余的对象有资格进行清理。堆可以压实作为清除的一部分。

处置和释放方法都提供用于清洁资源,是通过GC处理的选项。例如。这可能是原生手柄等。他们什么都没有做与在托管堆中回收内存。

处置必须在其上执行IDisposable类型显式调用。它可以通过Dispose()方法本身或者经由using构建体被调用。 GC将不会自动调用Dispose。

一个终结或析构函数(作为语言规范要求它),另一方面将自动被称为的某个后的目的是获清理。的Finalize方法上的专用线程顺序执行。

Dispose()允许资源的确定性清理而终结可以作为一个安全网的情况下,用户不调用Dispose()行动。

如果一个类型工具终结,实例的清理被延迟终结之前必须清理调用。即这将需要额外的收集回收内存的类型的实例。如果类型实现IDisposable以及,Dispose方法可以被称为然后实例可以从最终确定自身删除。这将允许被清洗的对象,就好像它没有终结。

如果您想挖成这样,我推荐的通过C#CLR通过杰弗里里希特。这是一个伟大的书,它涵盖了这一切的血淋淋的细节(我离开了一些细节)。新的第3版刚刚发布。

其他提示

一的.NET的好处是垃圾收集器。在许多语言中,每一条内存必须由显象任何分配的内存管理最终应该被释放。在.NET(C#),垃圾收集器(GC)会照顾你释放内存的过程的。它跟踪你的对象的使用,并且它们成为后“无根”(即:有应用程序以该对象内的任何引用,直接或间接地),该对象的存储器被自动清理

处置,或更具体地,IDisposable和Dispose模式,用于从GC单独处理资源。有些资源需要的清理明确的,由于种种原因。这包括使用“本机” API(如.NET不知道分配的内存),采用的是原生包裹手柄等。为了干净地处理这个资源,你实现IDisposable和Dispose模式。

定稿当它们将要被垃圾收集器收集关于对象时出现。这提供了一个“安全网”,其中由应该被配置的对象仍然可以比是否理想了一下后清理。通过实施一个终结,可以保证托管资源总是被释放。

大多数样品的问题是,有使用IDisposable的多种原因,并根据你使用它的原因的正确实施不同。例如,如果你直接包装原生资源,你应该实现一个终结,但如果你封装另一IDisposable的类型,终结是没有必要的,即使你还是应该实现IDisposable。为了解决这个问题,我已经写了IDisposable和定稿深入我的博客上,描述多种原因你会使用IDisposable的,并且不同的图案不同的原因。

您可能只是想读什么,我考虑了IDisposable的权威文章,终结和垃圾收集,肖恩·法卡斯的 CLR内向外:。挖掘到的IDisposable

此文章叶关于对象非常毫无疑问。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top