gpt4 book ai didi

.net-2.0 - 使用 yield 迭代数据读取器可能不会关闭连接?

转载 作者:行者123 更新时间:2023-12-03 20:40:48 26 4
gpt4 key购买 nike

这是使用我在谷歌搜索时在几个地方找到的 yield 关键字从数据库中检索数据的示例代码:

public IEnumerable<object> ExecuteSelect(string commandText)
{
using (IDbConnection connection = CreateConnection())
{
using (IDbCommand cmd = CreateCommand(commandText, connection))
{
connection.Open();
using (IDbDataReader reader = cmd.ExecuteReader())
{
while(reader.Read())
{
yield return reader["SomeField"];
}
}
connection.Close();
}
}
}

我认为在此示例代码中,如果我们不遍历整个数据读取器,连接将不会关闭,我是否正确?

这是一个不会关闭连接的示例,如果我理解正确的话..
foreach(object obj in ExecuteSelect(commandText))
{
break;
}

对于可能不是灾难性的数据库连接,我想 GC 最终会清理它,但是如果它不是连接而是一个更关键的资源呢?

最佳答案

编译器综合实现的Iterator IDisposable , 其中 foreach来电时foreach循环退出。

迭代器的 Dispose()方法将清理 using关于提前退出的声明。

只要你在 foreach 中使用迭代器循环,using()阻止,或调用 Dispose()方法以其他方式,迭代器的清理将发生。

关于.net-2.0 - 使用 yield 迭代数据读取器可能不会关闭连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47521/

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