gpt4 book ai didi

c# - 删除老式的终结器

转载 作者:太空宇宙 更新时间:2023-11-03 10:48:14 25 4
gpt4 key购买 nike

在一个将近 10 年的老系统中,我实现了几个 IDisposable 实现。回到过去,当我还年轻还很傻的时候,趋势是也实现终结器:

class MyClass: IDisposable
{
public void Dispose() { Dispose(true); }
~MyClass { Dispose(false); }

private void Dispose(bool bDisposing)
{
... dipose ...
if(bDisposing)
GC.SupressFinalize(this);
}
}

最后,在将近十年之后,这让我们感到痛苦 - Dispose 方法在从终结器调用时抛出异常,并且该进程在没有警告的情况下意外终止。

我想删除所有终结器,只保留将释放资源的 Dispose 方法。是否有任何理由保留终结器?没有一个对象使用非托管资源,所以我很确定我不会发生资源泄漏。对吧?

最佳答案

关于何时需要终结器的一般建议是:几乎从不。请参阅 Eric Lippert 对以下问题的回答:

When should I create a destructor?

您的应用程序是否会泄漏取决于很多因素。但是,如果您没有非托管资源,并且您擅长处置应该处置的类,那么就不会有泄漏。

关于您在上面关于遇到终结器在未完全构造的对象上运行的问题的评论:这是终结器可能是一件危险的事情的部分原因。编写正确的终结器是一件非常困难的事情。如果您确实有必须始终清理的资源,您应该使用 SafeHandle:

http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.safehandle(v=vs.110).aspx

关于c# - 删除老式的终结器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22590634/

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