gpt4 book ai didi

c# - 如何正确实现 IDisposable

转载 作者:可可西里 更新时间:2023-11-01 08:59:54 27 4
gpt4 key购买 nike

作为一名开发人员,我见过太多 C# 代码试图通过将变量设置为 null 或在他们自己的类 Dispose() 方法中调用类(例如 DataSet)上的 Dispose() 来帮助 GC我一直想知道是否需要在托管环境中实现它。

这段代码在其设计模式中是否浪费时间?

class MyClass : IDisposable 
{
#region IDisposable Members

public void Dispose()
{
otherVariable = null;
if (dataSet != null)
{
dataSet.Dispose();
}
}

#endregion
}

最佳答案

GC 不会调用 .Dispose()(但是,它会调用 finalize ~MyClass() 方法,您可以可以提供对 Dispose() 方法的调用,以便在 GC 决定清理您的类时自动管理资源。

您必须始终提供一种方法来将 DataSets 等内部资源分配给使用您的类的代码(并确保您实际调用了 .Dispose() 或包装构造函数在 using 中)。强烈建议在使用内部资源的类上使用 IDisposable

来自 MSDN :

The primary use of this interface is to release unmanaged resources. The garbage collector automatically releases the memory allocated to a managed object when that object is no longer used. However, it is not possible to predict when garbage collection will occur. Furthermore, the garbage collector has no knowledge of unmanaged resources such as window handles, or open files and streams.

public void Dispose()
{
otherVariable = null;
if (dataSet != null)
{
dataSet.Dispose();
dataSet = null;
}
}

关于c# - 如何正确实现 IDisposable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2736414/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com