.net - 调用 Dispose 方法会清除和压缩 .Net 中的内存吗?

标签 .net garbage-collection idisposable finalizer

我对 .Net 中的 Dispose 和 Finalize 方法有如下想法。如果我错了,请纠正我。

Dispose :实现 IDisposable 接口(interface)并在 Dispose 方法中删除未使用/非托管代码。开发者如果想要立即移除需要手动调用,否则 GC 会在调用时释放资源。

Finalize :当 GC 调用时,它将释放未使用的托管代码,如果实现了 IDisposable,那么它将调用 Dispose 方法来释放非托管资源(通常)。

问题是:当我们使用 Dispose 方法释放资源时,内存会立即被释放并压缩(就像 GC 一样)?

最佳答案

您的问题的答案是否定的:释放分配给对象的内存与调用 Dispose 无关。方法。当垃圾收集器到达它时,它会在适当的时候发生。

一般来说,Dispose旨在加速外部资源的释放,例如文件句柄、信号量、数据库句柄和其他经常由操作系统分配的项目。如果您的对象持有其他 IDisposable对象,它也应该在调用 dispose 时处理它们。

然而,Finalizer 不同:它作为垃圾回收的一部分被调用,旨在释放在 dispose 期间尚未释放的外部资源(可能是因为用户忘记调用 Dispose )。终结者不得调用 Dispose您的对象可能拥有的其他对象,因为它们已经在被垃圾收集的过程中。

关于.net - 调用 Dispose 方法会清除和压缩 .Net 中的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9204677/

相关文章:

c# - 对具有复杂类型的多个属性进行 GroupBy

c# - Silverlight 5 + Internet Explorer 9 在后续 GET 中使用来自 POST 的旧内容类型?

C# 4.0 如何获取给定字符串的 64 位哈希码

垃圾回收

c# - 关于处理 DataContext 和 DataBind()

c# - "Using{}"是处置对象的好习惯,即使没有引用它的变量

.net - VB.NET 和 System.Linq.Dynamic 命名空间

c# - 通过引用传递数据成员

Java GC CMS 收集器时间

c# - Autofac:如何在不绕过 IoC 容器的情况下限制 IDisposable 对象的生命周期