Win XP SP2でVB.Net 2003にて、TCP/IPの通信で計測情報を受信し、保存するものを作成したのですが、数時間実行しておくと、なぜか終了してしまい、デバッグの出力ウィンドウに、「fatal out of memory error」となっています。
タスクマネージャーで監視したところ、起動時には、60MBくらいで、3〜4MB増えると、その分減るという様なことを繰り返していますが、ある時500MBくらいまで増え、終了してしまうみたいです。
全く見当がつかないのですが、どのような原因が考えられるのでしょうか?
所謂、メモリリークですネ!
ですが、原因となりますと、当然、取得したメモリを解放していない
と言うことになりますので、New とかして取得したメモリが、解放さ
れていない箇所を見て頂くしか・・・
尚、当然、コーディング方法にも起因しますので、一概にメモリ取得
のみとも思えません。ClassをNewし続けても同様のことが発生します。
ご検討下さい。
※ 市販品のツールで、メモリリーク等を検出するソフトが出てます
が、高価なので・・・評価版はCDが入手可能と思います。
日本コンピュウェア社のホームページで、DevPartnerStudio と
言う商品を見て下さい。
以上。
さっそくのレス有難うございます。
常時タイマーのイベントくらいしかないのですが、その中でNewしても、イベント終了時には自動的に解放されないのでしょうか?
また、それが数時間後に起こるということはありえる事なのでしょうか?
※コレは予想です。
見当違いかもしれません。
> 常時タイマーのイベントくらいしかないのですが、その中でNewしても、> イベント終了時には自動的に解放されないのでしょうか?
明示的に開放するように仕向けないといけないオブジェクトもあると思います。
そういう類のモノを使ってはいませんか?
> また、それが数時間後に起こるということはありえる事なのでしょうか?
タイマーイベントがたった一回しか起こらないのであれば、
まぁ…まぁ、多分大丈夫「かも」しれません。
が、しかし、万全を期すことで安心できるなら、万全にすべきだと思います。
→コレによってプログラミングスタイルが変わるとしても(orz
ノ<と、Cのmalloc()&free()を思い出しながら書いてみました。
レス、ありがとうございます。
そうですね、今一度よく見直してみます。
Newが原因だったようで、メモリエラーは発生しなくなりました。
ありがとうございました。
ツイート | ![]() |