gpt4 book ai didi

c# - 垃圾回收,我们应该依赖它吗?

转载 作者:太空狗 更新时间:2023-10-29 20:48:53 25 4
gpt4 key购买 nike

在代码中,假设我们有:

using (SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToString()))
{
cn.Open();

// Set all previous settings to inactive
using (SqlCommand cmd = new SqlCommand("UPDATE tblSiteSettings SET isActive = 0", cn))
{
cmd.ExecuteNonQuery();
}

cn.Close();
}

cn.close 在技术上不是必需的,因为垃圾收集会为我们处理连接。

但是,无论如何我总是喜欢关闭它并且不依赖于垃圾收集。这很糟糕吗?浪费时间?或者考虑不依赖自动化的良好做法?

提前感谢您的想法和意见。我将其标记为社区维基,因为它可能是主观的。

最佳答案

你不应该为此依赖 GC。陈峰的blog article about this是一个很好的起点。本质上,如果您不手动Close/Dispose 连接,则无法保证它会发生,否则它只会在时发生Dispose 是从 Finalizer 调用的,这可能永远不会发生:

A correctly-written program cannot assume that finalizers will ever run at any point prior to program termination.

是的,在实践中,您的连接的终结器可能最终会发生,但即使那样,您保持实时连接的时间也比您实际需要的时间长。如果数据库在任何时候只允许有限数量的实时连接,这可能会产生问题。

您正在做的被认为是好的做法:当您用完资源后,释放它们。如果对象是IDisposable,请尽可能Dispose

关于c# - 垃圾回收,我们应该依赖它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3546045/

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