お世話になります。
現在、CAsyncSocketクラスをもちいたソケット通信プログラムを作成しています。
一応、サーバとクライアント間で通信はできています。
しかし、データ受信する度にプログラムのメモリ使用量が増加してしまいます。
ちなみに、デバックモードで実行してもメモリリークは表示されていません。
※(メモリ使用量は、タスクマネージャーにて確認)
データ受信は、CAsyncSocketクラスを継承し自作したクラスのOnReceive内にてReceive
関数にて行っています。
このメモリ使用量が増加する現象を解決するには、どうすればよいのでしょうか?
アドバイスよろしくお願いします。
環境
OS:XP
VC++6.0 SP6
それって本当にメモリリークなの?
タスクマネージャで何を(どの項目を)確認したの?
メモリリークと思っているものは実はメモリリークでないことが多々ある。
コメント有難うございます。
タスクマネージャのプロセスタブのメモリ使用量の欄にある数字が大きくなります。
また、パフォーマンスタブの物理メモリの利用可能の数字が小さくなっていきます。
タスクマネージャの「メモリ使用量」は正確には WorkingSet Size なので
「今この瞬間に RAM 上に存在するワークエリア量」である
(したがって真の意味でメモリ使用量なわけだ)
これが増えたからといってメモリリークではない
http://d.hatena.ne.jp/NyaRuRu/20060730/p1
ためしに最小化ボタンを押してアイコン化すると一気に減ったりしないかい?
メモリリークを調べたいなら、パフォーマンスモニタの
private bytesや、handle countを見るべきと思いますが
必ずソケットに関連がありません。
new delete handleなどをゆっくりチェックするほうがいいと思います。
Debugモ-ドで実行してリークで終わったところで停止することではだめですか?
なんかおかしいですね。
「Debugモ-ドで実行して、リークしたと予想できるところで停止する。」
これではだめですか?
> なんかおかしいですね。
> 「Debugモ-ドで実行して、リークしたと予想できるところで停止する。」
> これではだめですか?
デバッグモードでリークの痕跡が見つからないので、
どこでリークしているか見当がつかないのでは?
ところで、デバッガを使いこなせていないために、リークを検出できていない可能性
は?
{
int *p = new int;
}
とか書いて、検出できるんですよね?
各位 コメントありがとうございます。
もう一度プログラムを見直してたところ、受信処理の際に作成した受信バッファがうま
くdeleteされていない事が原因でした。
このような初歩的なミスにより、的外れな書込みしてしまい申し訳ありませんでした。