VB6.0のアプリケーションのメモリ占有の原因についての質問です。

あるVB6.0の常駐GUIアプリケーションを作成しました。
機能としては主に以下のようなものがあります。
・自動ファイルの移動
・自動ファイル削除
ところがこのVBアプリケーションを常駐させておくと以下のような現象が起こります。

・ファイル移動処理や削除処理を行うとメモリの占有量が微妙に増える。そして増えたままになる(数KB程度)。
・処理を行わない間はメモリ占有量の変動はない。
・数百回処理を行ったあと(メモリ占有量が大幅に増えている状態)のGUIアプリケーションをマウスで通常ウィンドウ化→最小化を行うとメモリ占有量は初期値に近いところまで大幅に減る。

原因として以下のようなものを考えています。

・動的配列(Privateのプロシージャ内)の使用→Erase処理を行いましたが特に何も変化がありません。
・Function(Private)内の配列の使用→Erace処理をしていません。できれば触りたくない部分です。


以上を踏まえたうえでメモリ占有の原因と解決法をご存知の方がいらっしゃいましたらお教え下さい。
よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/04/18 11:30:12
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答1件)

id:F-15X No.1

回答回数111ベストアンサー獲得回数13

id:k1LoW

回答ありがとうございます。

確かにUBonud関数とLBonud関数は使用しておりました。そこで、UBonud関数とLBonud関数の使用を回避しましたが、メモリ占有量が増える現象はなくなりませんでした。

“数百回処理を行ったあと(メモリ占有量が大幅に増えている状態)のGUIアプリケーションをマウスで通常ウィンドウ化→最小化を行うとメモリ占有量は初期値に近いところまで大幅に減る。”

という点が本当の意味でのメモリリークではないことを示唆しているのかもしれません。

2007/04/11 13:23:31
  • id:cx20
    タスクマネージャに表示される「メモリ使用量」は「物理メモリのメモリ使用量」なので、
    スワップアウトが発生すると、見かけ上の使用量が減ったりします。

    また、Windows には以下のような仕様(最小化した時点でスワップアウトする仕様)があるようです。

    ■ トップ レベル ウィンドウが最小化されるとき、アプリケーションのワーキング セットが切り捨てられます。
    http://support.microsoft.com/kb/293215/ja

    この為、メモリリークを調べる場合は
    「タスク マネージャ」の [表示] - [列の選択] - [仮想メモリ サイズ] で
    「仮想メモリ」のサイズを調べたほうが良いようです。
  • id:k1LoW
    回答ありがとうございます。
    確かに仮想メモリのほうはウィンドウの最小化などではメモリの占有量は減りませんでした。
    私のアプリケーションでは仮想メモリも増え続ける状態にあるので、どこかでメモリリークをしている可能性があるということですね。


    --------------------------------------------
    メモリリークの確認方法はわかりました。
    あとはメモリリークの原因と解決法を引き続き回答をお願いします。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません