c# - 您是否需要处理对象并将它们设置为空?

标签 c# .net garbage-collection dispose

您是否需要处理对象并将它们设置为 null,或者垃圾收集器是否会在它们超出范围时清理它们?

最佳答案

当对象不再被使用并且垃圾收集器认为合适时,它们将被清理。有时,您可能需要将对象设置为 null 以使其超出范围(例如不再需要其值的静态字段),但总的来说通常不需要设置为 null

关于处置对象,我同意@Andre。如果对象是IDisposable,那么当您不再需要它时处理它是个好主意,尤其是当对象使用非托管资源时。不处理非托管资源将导致内存泄漏

您可以使用 using 语句在您的程序离开 using 语句的范围后自动释放对象。

using (MyIDisposableObject obj = new MyIDisposableObject())
{
    // use the object here
} // the object is disposed here

这在功能上等同于:

MyIDisposableObject obj;
try
{
    obj = new MyIDisposableObject();
}
finally
{
    if (obj != null)
    {
        ((IDisposable)obj).Dispose();
    }
}

关于c# - 您是否需要处理对象并将它们设置为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2926869/

相关文章:

c# - .net core 3 - b2c roles auth - 声明注入(inject)不起作用

.net - pdb 文件实际上是做什么的?

C# 和匿名对象数组

.net - 使用 dotCover 时测试结果不一致

java - 匿名对象创建和 GC

c# - 为什么使用 JpegBitmapDecoder 的 LongRunning 任务 (TPL) 会耗尽资源?

c# - NamedPipeServerStream 未授权访问异常

c# - 如果只有基本要求,则创建适用于任何 .NET 版本的 .NET 应用程序

internet-explorer - 在 Internet Explorer 中,为什么即使导航离开页面,内存泄漏仍然存在?

c++ - 当对象被分配给一个新对象时,对象会调用它们的析构函数吗?