2012-05-04 2 views
2

あなたが図書館を作成しているとしますか?つまり、このライブラリは24時間365日のサーバアプリケーションで使用される予定です。使い捨て可能な資料のライブラリコード

通常、usingステートメントを使用してアンマネージリソースを解放します。これは、一般的なAPIでラップされています。しかし、あなたは最終的なアプリケーションではなく、単なるライブラリを書いています。別のプログラマがDispose()に電話する忘れた場合はどうなりますか?あなたのlibのリソースリークを取得しようとしている! ファイナライザに依存することもできますが、ファイナライザがcalledになるという保証はありません。 管理されていないリソースが何とか解放されることを保証する方法はありますか?何か案は?

答えて

2

クラスのドキュメント化以外の解決策はありません。あなたのクラスがどのように使用されるのかを明示的に文書に書いてください(つまり、できるだけ早く処分することを意図しています。using、またはDisposeへの明示的な呼び出し)。

あなたの消費者が野生のゴミをゴミ箱に入れた場合、公衆が汚染の原因となるよりも、そのオブジェクトを適切に処分しないと、メモリリークの責任はなくなります。

+0

答えのためのThx。素敵な隠喩! – undefined

1

コード解析ルールCA2213: Disposable fields should be disposedが有効になっていることを確認してください。

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

+0

これは参考になるかもしれません。静的解析ルール:)しかし、私はこの問題に対するプログラマブルな解決策を考えました。 – undefined