gpt4 book ai didi

c# - 使用 IDisposable 进行垃圾收集

转载 作者:太空狗 更新时间:2023-10-29 23:59:15 27 4
gpt4 key购买 nike

我正在和一个人谈论 using() 语句。

他说如果我们不对像 StreamWriter 这样的东西使用 using() 语句,如果发生任何异常,资源将永远不会被收集。

我确实理解使用 using() 语句,但我不同意永远不会收集资源。我认为 using() 语句会在最后调用 dispose() 方法,这可以使收集更快。然而,即使我们不使用 using(),我们不调用 dispose(),资源仍然可以被垃圾收集器收集,尽管它可能需要更长的时间。

你同意谁的观点?

附言。我知道你们都在说什么。使用 using() 语句很重要。我只是想知道如果我们不这样做,资源是否绝对不会被收集?

最佳答案

让我们弄清楚这一点。假设所讨论的资源是一个文件句柄。垃圾收集器对文件句柄或如何释放它一无所知。文件句柄只是一个整数。

如果持有文件句柄的 StreamWriter 被垃圾回收,那么垃圾回收器会将对象放入终结队列。当终结队列运行时,它会调用对象的终结器,就是释放文件句柄的东西。

都清楚了吗?垃圾收集器不释放资源;垃圾收集器知道的唯一资源是内存中的对象。在释放对象之前,它已完成,因此对象本身知道如何释放资源。

关于c# - 使用 IDisposable 进行垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6144470/

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