주위에 인터넷 검색을하는 동안 몇 곳에서 발견 항복 키워드를 사용하여 데이터베이스에서 데이터를 검색하는 샘플 코드입니다 : yield를 사용하여 datareader를 반복하면 연결이 닫히지 않을 수 있습니까?
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();
}
}
}
내가이 샘플 코드에서 생각, 내가 잘못 알고, 연결이되지 것 우리가 전체 datareader를 반복하지 않는다면 닫혀 야합니까? 여기
는 내가 제대로 산출 이해한다면, 연결을 종료하지 않을 예 .. 치명적인하지 않을 수도 DB 연결에 대한
foreach(object obj in ExecuteSelect(commandText))
{
break;
}
, 난 GC가 결국 그것을 청소 것이라고 생각하지만, 연결 대신에 더 중요한 자원이라면 어떨까요?