3

TcpClientの新しいインスタンスがリモートホストに接続します。そのNetworkStreamが取得され、保存されます。ガベージコレクションされないように、TcpClient自体も保存する必要がありますか?

「破棄するには保存する必要があります」と答える場合:私の特定のケースでは、TcpClientは通常、長期間(アプリの存続期間)存続しているため、破棄する必要はありません。ただし、一般的に、Disposeを呼び出すためだけに保存​​する必要があることに同意します。

4

2 に答える 2

2

NetworkStreamがまだ参照されている場合、NetworkStreamは削除されません。ガベージコレクタは、参照されなくなったオブジェクトのみをクリーンアップします。収集する必要のあるオブジェクトについては実際には何も知りません。参照を追跡するだけです。

ただし、TcpClientには、TcpClientが収集された場合にストリームを無効にするファイナライザーがある場合があります。TcpClientへの参照も保持する方がおそらく安全です。(ソースコードからわかる限り、ファイナライザーは現在これを実行していませんが、将来実行されないという保証はありません。)

于 2010-03-08T12:32:07.247 に答える
1

If the object is not referenced, it will be garbage collected eventually, that will make your NetworkStream unusable. You need to keep the reference of that TcpClient object as long as you wish to use it.

于 2010-03-08T12:01:14.540 に答える