質問

継承した古い.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はまだそこにあり、開いていますか?または、アドレス指定されていないため、自動的にガベージコレクションが行われますか?

これをデバッグしてテストする方法は考えられませんでした。誰かが素晴らしいアイデアや提案を持っているなら。

役に立ちましたか?

解決

私はそれが閉じられると信じていますが、ガベージコレクターがそれに近づくまではそうではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top