web-dev-qa-db-ja.com

管理されていないリソースをどのようにして見つけますか?

.NETのドキュメント、具体的にはWebRequestクラスを調べても、そのインスタンス化をusingステートメントでラップする必要があることを示す情報はありません。提供されている例でもこれは行われません。しかし、ほとんどのオンラインの例では、これがまさに行われたことです。

私の質問は、どのクラスを破棄する必要があるかを具体的に知るにはどうすればよいですか?一般的な経験則はありますか、それともクラス定義を調べて、アンマネージリソースを何らかの形で処理するかどうかを確認しますか?

7

私の質問は、どのクラスを破棄する必要があるかを具体的に知るにはどうすればよいですか?

IDisposableを実装していますか?はい?その後、廃棄する必要があります。そうでない場合、そうではありません。一部のアプリではそれなしで済む可能性があります(C#および最新のオペレーティングシステムは、一般に、後処理のほうが優れています)が、それでも間違っている®です。

代わりにClose(または類似の何か)を呼び出す必要があり、IDisposableを実装しないフレームワーククラスはごくわずかですが、これらはドキュメントでそう述べています。これらは例外です。

9
Telastyn

しかし、ほとんどのオンライン例では、これがまさに行われたことです

方法がわからない。 WebRequestもその具体的な子孫HttpWebRequestも実際にはIDisposableを実装していないため、これは

 using (System.Net.WebRequest wr = new System.Net.HttpWebRequest())
 {
     //What?
 }

はコンパイルされません。実際、このトピックをグーグルで検索すると、なぜWebRequestIDisposable...を実装しないのかについての推測がほとんどです。


MSDNのドキュメントは決して完璧というわけではありませんが、doesはクラスがIDisposableを実装するときに通知します。たとえば、 StreamWriter の備考セクションを参照してください。

2
AakashM