gpt4 book ai didi

c# - 在以下情况下如何确保不发生内存泄漏

转载 作者:太空狗 更新时间:2023-10-30 00:12:30 25 4
gpt4 key购买 nike

如果一个类有一个包含非托管资源的属性。如何保证在使用类时没有内存泄漏

Class A
{
B {get; set;}
}

B 包含非托管资源。

最佳答案

实现 IDisposable 并通过调用 Dispose() 清理非托管资源,最好将对 Dispose 的调用放在 finally 中 语句,这样您即使在出现异常的情况下也能清理资源。

C# 有一个 using 关键字,您可以使用它来确保调用 Dispose 方法,即使抛出异常也是如此。

编辑:根据 Ran 的回答合并调用 GC.SuppressFinalize 和终结器实现

class A : IDisposable
{
private bool _disposed;

~A()
{
this.Dispose(false);
}

public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
// dispose managed resources
}

// clean up unmanaged resources

_disposed = true;
}
}
}

class Program
{
static void Main(string[] args)
{
using (var someInstance = new A())
{
// do some things with the class.
// once the using block completes, Dispose
// someInstance.Dispose() will automatically
// be called
}
}
}

关于c# - 在以下情况下如何确保不发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4364395/

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