2016-10-07 5 views
0

それは私がそれを言うMSDNstackoverflow answerstringreaderとstringwriterでdisposeを呼び出す必要があるのはなぜですか?

StringWriter implments public abstract class TextWriter : MarshalByRefObject, IDisposable

を読んで始まります。

Frameworkは、開発者にマニュアルを提供するために、 を実装する必要がありSystem.IDisposableインタフェースを提供します管理されていない リソースが不要になるとすぐに解放します。

アンマネージドリソースとは何ですか?私は明らかにStringWriterの資格はないと思います。私はIDisposableインターを継承せずに自分自身を記述する場合は....私はDispose()

class ConfusedDevStringWriter{ 
    private StringBuilder sb; 
    public ConfusedDevStringWriter(){ //ctor 
     sb = new StringBuilder(); 
    } 
} 

を追加する必要が表示されず、実際に私は、Visual Studioのメモリデバッガでテスト:、関数が戻ったら enter image description here StringWriterとその解放されStringBuilder ... Moreoeverは、処分を呼び出すと、そうではない...にStringWriterために何もしないようにinheすべてのクラスを

enter image description here

です IDisposableからの有用性は有用である Disposeである。再度これは私の質問に戻る 管理されていないリソースとみなされるもの(例は非常に高く評価されますn_n)。私はファイルがそれの一つだと聞いた...しかし、CLRのVMではない?...すべてのリソースは、それによって管理されるべきではない? IDisposableを実装し、気にすることなく等1が安全TextWriterの任意のサブクラスを処分することができますのでストリーム、ファイルハンドル、などのアンマネージリソースを持っているいくつかのサブクラスを持って抽象TextWriter、から

+3

あなたは「*管理されていないリソースと見なされるもの*」には既に回答があります:http://stackoverflow.com/questions/3433197/what-exactly-are-unmanaged-resources – user3185569

+1

質問には多かれ少なかれhttp ://stackoverflow.com/questions/234059/is-a-memory-leak-created-if-a-emorystream-in-net-is-not-closed(MemoryStreamについては同じQ)。 –

+0

私はそれをhttp://stackoverflow.com/questions/2475228の複製としてクローズしました。それはそれとhttp://stackoverflow.com/questions/3433197の間に両方の質問に答えます。 –

答えて

0

StringWriter継承処分が必要かどうか。

のでStringWriter廃棄実際は(DataSetに類似)何もしないかもしれないが、それはまだIDisposableを実装して何を処分することをお勧めします。

+1

私は同意しません。何もしないコードを呼び出すのは良い習慣ではありません。実際には悪い習慣です。プログラミング言語は「処理する」ためのものです。待つか何もしない。 – Darkonekt

1

StringWriterが最もTextWritersは、アンマネージリソースを持っているだろう、おそらくので、IDisposableを実装する、TextWriterから下降します。 TextWriterを受け取り、それがどこに由来しているかわからない場合(TextWriterの子孫である可能性があります)、TextWriterIDisposableを実装しているため、管理されていないすべてのリソースを適切に管理できます。 TextWriterを受け入れるコードを書くことができ、ライターがもはや必要なくなったときにDisposeを呼び出し、すべてがクリーンアップされることを信頼できるようにすることができます。

関連する問題