は周りグーグルながら、私はいくつかの場所で見つかったyieldキーワードを使用してデータベースからデータを取得するサンプルコードです: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();
}
}
}
私は接続がないだろう、このサンプルコードでそれを考えに修正アムデータレディタ全体を反復処理しない場合は閉じますか?ここで
は、私は壊滅的ではないかもしれないDB接続のために...正しく
foreach(object obj in ExecuteSelect(commandText))
{
break;
}
を得理解していれば、私はGCが最終的にそれをクリーンアップするだろうとし、接続を閉じないだろう例ですが、接続の代わりにそれがより重要なリソースだったらどうなるでしょうか?