3

ライブラリを作成していると想像してください。たとえば、このライブラリは 24 時間年中無休のサーバー アプリケーションで使用される予定です。パブリック API にラップされた管理されていないリソースがいくつかあるため、Disposable パターンを実装します (ファイナライザーを実装することもできます)。

通常、using管理されていないリソースを解放するにはステートメントを使用します。ただし、最終的なアプリケーションではなく、単なるライブラリを作成しています。別のプログラマーが呼び出すのを「忘れた」場合はどうなりますDispose()か? ライブラリでリソースリークが発生します! ファイナライザーに依存することはできますが、ファイナライザーが呼び出されるという保証はありません。では、管理されていないリソースが何らかの形で解放されることを保証する方法はありますか? 何か案は?

4

2 に答える 2

2

クラスを文書化する以外に解決策はありません。クラスがどのように使用されることを意図しているかをドキュメントに明示的に記述します (つまり、可能な限り早い時期にクラスを破棄することを意図していusingますDispose

消費者がそのオブジェクトを適切に処分しない場合、メモリ リークの責任はありません。人々がごみを野生に捨てた場合に産業が汚染の責任を負うのと同じです。

于 2012-05-04T09:06:53.743 に答える
1

サーバー アプリケーションにコード分析ルールCA2213: Disposable fields should be discarded が有効になっていることが期待できます。

そうでなければ、彼らが Dispose() メソッドを呼び出すことを保証する方法があるかどうかわかりません。

于 2012-05-04T09:03:52.950 に答える