如何在.net 中处理一个类?

.NET 垃圾收集器最终会释放内存,但如果您想立即收回​​内存怎么办?在类MyClass中需要使用什么代码来调用

MyClass.Dispose()

并释放MyClass中变量和对象使用的所有空间?

请先 登录 后评论

6 个回答

Darren Kopp
public class MyClass : IDisposable
{
    public void Dispose()
    {
       // cleanup here
    }
}

然后你可以做这样的事情

MyClass todispose = new MyClass();
todispose.Dispose(); // instance is disposed right here

using (MyClass instance = new MyClass())
{

}
// instance will be disposed right here as it goes out of scope
请先 登录 后评论
Tundey

IDisposable 接口实际上适用于包含非托管资源的类。如果您的类不包含非托管资源,为什么您需要在垃圾收集器之前释放资源?否则,只需确保您的对象尽可能晚地实例化并尽快超出范围。

请先 登录 后评论
Brian Lyttle

是否还应该提及 dispose 并不总是指内存?我比内存更频繁地处理资源,例如对文件的引用。 GC.Collect() 与 CLR 垃圾收集器直接相关,可能会释放内存,也可能不会释放内存(在任务管理器中)。它可能会对您的应用产生负面影响(例如性能)。

归根结底,你为什么要立即恢复记忆?如果有来自其他地方的内存压力,操作系统会在大多数情况下为您获取内存。

请先 登录 后评论
Seibar

如果你不想(或不能)在你的类上实现 IDisposable,你可以像这样强制垃圾收集(但它很慢)-

GC.Collect();
请先 登录 后评论
Keith

如果 MyClass 实现了 IDisposable,你就可以做到这一点。

MyClass.Dispose();

C 中的最佳实践

请先 登录 后评论
Booji Boy

你不能真正强制 GC 在你想要的时候清理一个对象,虽然有办法强制它运行,但没有说它清理了你想要/期望的所有对象。最好在 try catch ex finally dispose end try (VB.NET rulz) 方式中调用 dispose。但是 Dispose 是用于清理系统资源(内存、句柄、db 连接等,由对象以确定的方式分配)。Dispose 不会(也不能)清理对象本身使用的内存,只有 GC可以这样做。

请先 登录 后评论