• ベストアンサー

デバッグ実行の繰り返しでメモリ不足

windowsXP、VB6を使ってアプリケーションを作成しているのですが、 このアプリケーションで「デバッグ実行→終了」を繰り返すと、 2回目以降の実行途中でメモリ不足エラーが表示されます。 VB6を終了し、再度起動するとまたデバッグ実行が可能になり、 上記同様に「デバッグ実行→終了」の繰り返しでまたメモリ不足になります。 http://chaichan.web.infoseek.co.jp/vbtips/VBMemo2006111601.htm を参考にすると、 動的配列や多次元配列、パブリック変数の多用が原因かと思ったのですが、 VB6起動直後は実行できるのでよくわかりません。 アドバイスをいただけないでしょうか。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

>VB6ツール上の■でメモリの解放は可能でしょうか? VB6ツール上の■はデバッグしている最中に使うと強制終了と考えてもらっていいでしょう。 強制終了というのは現状の状態で実行状態を終了する。 つまりメモリ上に付加を掛けている処理などは完全に終わりを宣言されずに残ってしまいます。 例えば身近なところでExcelを操作するときにExcelObjectをOPENした後にVB6ツール上の■を押して強制終了した場合、画面上からExeが消えたりデバッグモードが解除されていいように見えますが、タスクマネージャを起動して実行中のプロセスを見るとExcel.exeが実行したまま残っています。 このようになった場合Excel.exeはタスクマネージャ上でプロセスの終了をしてあげなければ終了しません。 同じような考え方でデバッグ中に強制終了してしまうとVB6のツール内にメモリを確保した状態で残ります。

その他の回答 (3)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

一部に特殊なオブジェクト(参照設定で指定したり、Declareで外部 DLLを参照する等)を使っていませんか? 私の経験であったのはDLLで、これがプロセス空間に張り付く形式に なっており(標準モジュールで定義するとこうなる)、しかも内部 データとして動的メモリを確保する事例です。 該当オブジェクトを使用している部分をクラスモジュールにし、 必要な時だけインスタンス化し、用が済めばインスタンスを消滅 させるという方法で回避しました。

回答No.2

WinAPIを使っている場合、APIで確保したメモリやハンドルなどをちゃんと解放しないとデバッグを繰り返すことでメモリ不足になることがあります。 Exeの終了時にOSが自動解放してくれるオブジェクトであっても、VB6のデバッグはVisual Studioのプロセス(VBの場合はVB6.exe)の中で動いているため、実質的に単一のExeで起動し続けます。これにより、未解放のオブジェクトが蓄積されるとメモリ不足になります。 また、#1さんのご指摘にあるように、適切な終了のステップを踏まずにアプリケーションを中断すると、本来デバッグ終了時に解放されるべきオブジェクトが蓄積される場合があります。 アプリケーション自体を「Endステートメント」で終了しているのであれば、それも原因のひとつになるかもしれません。 タスクマネージャでVB6.exeのメモリ使用量を比較してみてください。 デバッグ開始前とデバッグ終了後で使用メモリが増加していたら、おおよそ未解放オブジェクトのデータ量です。

回答No.1

終了は起動したプログラムの×や閉じるボタンなどで終了しているのか、VB6ツール上の■を押しているのかによる可能性も。 後者だとメモリの解放が不完全になっているのじゃないのかと思います。 ちなみにOSはXPとわかりましたが、他のスペックはどうなっているのでしょうか?

GreenVVV
質問者

補足

ご回答ありがとうございます。 終了はVB6ツール上の■を押しています。 メモリの解放が不完全とのことですが、 VB6ツール上の■でメモリの解放は可能でしょうか? 他のスペックは CPU:Intel Core2 2.00GHz メモリ:3.00GB です。 よろしくお願いいたします。

関連するQ&A