DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C# 非同期ソケット通信について

環境/言語:[Windos2000,C#]
分類:[.NET]

初めましてyasuというものです。

現在C#で非同期ソケットを使用するサーバ、クライアントを作成しており、実際に正常に通信しているところまで確認できています。
ですが、ソケットの接続、クローズ、データ送信等を続けて実行していると徐々にメモリ使用量が増えていく現象が発生しています。(タスクマネージャで確認)
ソケットのクローズ、null代入を行うことで、ソケットが使用しているメモリは解放されるものだと思っておりましたが他に何か処理が必要なのでしょうか?

また、ゾンビプロセスが残っている(C#にはこういう概念がある?)可能性があるのでしょうか?
ゾンビプロセスについては、C#ではありませんが次のURLで調べました。
http://hp.vector.co.jp/authors/VA003991/kouza/senior/index.html
のソケットプログラミング入門1

ご存知の方いましたら、ご教授頂けないでしょうか。宜しくお願い致します。
きいぼーです。

こんにちは、yasuさん
> ソケットのクローズ、null代入を行うことで、ソケットが使用しているメモリは解放されるものだと思っておりましたが他に何か処理が必要なのでしょうか?

C#は素人ですので、的外れかもしれませんが。

以下のURL
http://www.atmarkit.co.jp/fdotnet/vb6tonet2/vbnet2_05/vbnet2_05_01.html#vbnet0501
「オブジェクト生成と解放のタイミングの違い 」
に有るように、VS.Netでは、オブジェクト参照をクリアしても、
実際のところ開放はされません、ガーベージコレクトが管理していて、
開放はすぐにされない。のが原因ではないでしょうか?
GC.Collect
を組みこんではどうでしょうか?
きいぼーさんご返答ありがとう御座います。

ガーベージコレクタについては、私のほうでもいろいろと調べてみまして、実際に

> GC.Collect

を組み込んで動作確認してみましたが、メモリが解放されませんでした。
どうもクローズ、nullするだけではプロセスが確保したメモリを解放してくれていないように思われます。

実際のソースコードはmsdnの
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/csref/html/vcoricsharptutorials.asp
「非同期サーバソケットの例」を参考にしているので間違いは無いと思うのですが・・
何か処理的に足らないものがあるのでしょうか?

DOBON.NET | プログラミング道 | プログラミング掲示板