2

継承した古い .NET 1.1 プロジェクトの DataReaders をクリーンアップしています。

以前の開発者は、ほとんどの DAL メソッドが SqlDataReaders を返すような方法でデータ アクセス レイヤーをコーディングしました (したがって、.Close() メソッドまたは .Dispose() メソッドを適切に呼び出すのは呼び出し元に任されていました)。

ただし、呼び出し元が返された SqlDataReader をキャッチしていない (したがって、適切に破棄していない) 状況に遭遇しました。以下のコードを参照してください。

データ アクセス方法:

Public Shared Function UpdateData() As SqlDataReader
   ...

   drSQL = cmdSQL.ExecuteReader(CommandBehavior.CloseConnection)

   Return drSQL

End Function

呼び出しコード:

...
DataAccessLayer.UpdateData()
...

ご覧のとおり、呼び出し元のメソッドは、返された SqlDataReader を受信/キャッチしません。それでどうなるの?その SqlDataReader はまだそこにあり、開いていますか? それとも、何も対処されていないため、自動的にガベージコレクションが行われますか?

これをデバッグしてテストする方法が思いつきませんでした。誰かに素晴らしいアイデアや提案があれば。

4

1 に答える 1

4

私はそれが閉鎖されると信じていますが、ガベージコレクターがそれに近づくまではそうではありません。それは非常に長い間ではないかもしれません...

于 2008-10-29T16:09:12.207 に答える