.NETのドキュメント、具体的にはWebRequest
クラスを調べても、そのインスタンス化をusing
ステートメントでラップする必要があることを示す情報はありません。提供されている例でもこれは行われません。しかし、ほとんどのオンラインの例では、これがまさに行われたことです。
私の質問は、どのクラスを破棄する必要があるかを具体的に知るにはどうすればよいですか?一般的な経験則はありますか、それともクラス定義を調べて、アンマネージリソースを何らかの形で処理するかどうかを確認しますか?
私の質問は、どのクラスを破棄する必要があるかを具体的に知るにはどうすればよいですか?
IDisposable
を実装していますか?はい?その後、廃棄する必要があります。そうでない場合、そうではありません。一部のアプリではそれなしで済む可能性があります(C#および最新のオペレーティングシステムは、一般に、後処理のほうが優れています)が、それでも間違っている®です。
代わりにClose
(または類似の何か)を呼び出す必要があり、IDisposable
を実装しないフレームワーククラスはごくわずかですが、これらはドキュメントでそう述べています。これらは例外です。
しかし、ほとんどのオンライン例では、これがまさに行われたことです
方法がわからない。 WebRequest
もその具体的な子孫HttpWebRequest
も実際にはIDisposable
を実装していないため、これは
using (System.Net.WebRequest wr = new System.Net.HttpWebRequest())
{
//What?
}
はコンパイルされません。実際、このトピックをグーグルで検索すると、なぜWebRequest
がIDisposable
...を実装しないのかについての推測がほとんどです。
MSDNのドキュメントは決して完璧というわけではありませんが、doesはクラスがIDisposable
を実装するときに通知します。たとえば、 StreamWriter の備考セクションを参照してください。