こんにちは、当方、VB6.0を使用してアプリケーションを作成していますが、メモリリークが発生して困っています。
以下、プログラムのイメージになります。
ファイルを常時監視するメソッド(chkfile)の無限ループ内で、ファイルを取得するメソッド(getfile)を使用して、
ファイルを取得→変換する処理を行っています。
ファイルの取得方法は2パターンあり、1つ目は、任意の間隔(分単位)で機器と通信して取得する方法、
2つ目は共有フォルダを設定して置かれたファイルを取得する方法です。
現象としましては、数時間起動させておくとメモリを1GB程度使用してフリーズしてしまいます。
(エンドユーザーのPCで発生しており、当方の開発環境では確認しておりません。)
上記を踏まえ質問があります。
(1)自分でソースを追いかけ、調査を行ったところ、ファイルを取得するメソッド(getfile)内で、Scripting.FileSystemObjectを使用して
おり、以下の様に毎回インスタンスを生成しています。ですが、処理が終わった後、インスタンスの解放処理を行っていません。
スコープが外れた場合、参照は自動的に消滅すると思っていますが認識は合っていますでしょうか?
Dim fso As New Scripting.FileSystemObject
(2)「VB6.0 メモリリーク」のキーワードで検索したところ、UBoundについての記述を見つけることができました。
Microsoftサポート 文書番号: 197190(http://support.microsoft.com/kb/197190/ja)
ファイルを取得するメソッド(getfile)内で、UBoundを使用していますが、上記URLとは異なる使用方法です。
上記URLでの使用方法
UBoundのパラメータに配列の戻り値を指定する。
作成したプログラムでの使用方法
指定したフォルダ内のファイルを取得するメソッド(getinfile)でbyrefキーワードに配列を指定して、その配列の要素数をforループの
上限数に使用しています。
使用方法に問題はないと思うのですが、もしかして、UBoundを使用するのがまずいのでしょうか。
当然、予期せぬデータ等に対する不具合も疑いましたが、現象が発生した状態の変換元ファイルを使用して動作させたところ
問題はありませんでしたのでメモリリークを疑っている状態です。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
『ファイルを常時監視するメソッド(chkfile)の無限ループ内で』
と言う下りが気になりました。
ループ中に DoEvents やスリープが入っていると思いますが、
FileSystemObject のあるサブルーチンの中でずーとグルグル回っていることが、
メモリを食いつぶす原因かと思います。
何かのタイミングで Windows に制御を戻す事を考えてみてはどうでしょうか。
自分だったらタイマーを使って数ミリ秒に一回の監視を試みます。
不具合マシンの性能や Windows Update の当て具合、
サービスパックの入れ具合や、インストールしたソフトの悪影響も考えられますので、
欲を言えばテストするマシンの台数を増やして揉んで見る・・・と。
まあなんとも言えませんがあらゆる可能性がありますので、
色々検討してみて下さい。 ご健闘をお祈りします。
No.1
- 回答日時:
(1)オイラもそう思う。
でも、そうじゃない可能性を含め、終わったらnothingしたらいいんじゃない?
(2)よくわかんない。
でも、解決法が書いてあるから一旦、ローカル変数に格納してみたらいいんじゃない?
ついでに、ランタイム使っているなら、バージョンとかあわせて実験してみるのも良いかも。
くだらない回答してゴメンね。
でも(私には)、ソースコードないと問題特定はできないよ。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- Visual Basic(VBA) ファイル名の右側を変更したい ファイル名:「1001日別売上」の左側へ「2022」を追加し、「202 6 2022/10/14 10:03
- その他(IT・Webサービス) ホームページにカウント数を表示する 2 2022/10/28 10:37
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VB6のメモリ解放に関して
Visual Basic(VBA)
-
VB6でユーザー定義型がNothingかどうか調べるには?
Visual Basic(VBA)
-
メモリ不足
Visual Basic(VBA)
-
-
4
VBプログラムの終了
Visual Basic(VBA)
-
5
メモリの解放の仕方
Visual Basic(VBA)
-
6
メモリの解放について VB6 VBA
Visual Basic(VBA)
-
7
VB6のプロジェクトロードエラーについて
Visual Basic(VBA)
-
8
oracleのメモリ使用量が97%ほどに・・・減らしたいです
Oracle
-
9
Visual Basic 6.0 コンボボックスのChangeイベントが発生しません
Visual Basic(VBA)
-
10
VB6.0を使用しています
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++.NET 2003 「空のドキュメ...
-
VBSで、日本語文字列の抽出が、...
-
<input type="file" で初期値...
-
Perl CGIで、アップロードがで...
-
MFC SDIアプリで開いているファ...
-
MPEG1とMPEG2を見分ける
-
パーミッションの3桁目を6にせ...
-
VB6でTIFF図のプロパティを...
-
VB6.0のメモリリークについて
-
ファイル作成日時と更新日時を...
-
VBAで、JPG写真の撮影日時を読...
-
【Excel VBA】取り込んだファイ...
-
J2EE1.3の頃のチュートリアルの...
-
テキストファイルの特定行の削...
-
LTSpiceの出力データを取り扱う...
-
ASP.NET Web上のテキストファ...
-
[VB.NET] 処理の高速化を行いた...
-
テキストファイルの一部分を抽...
-
Excel で「OLE は現在使用でき...
-
CSVファイルの時刻の形式について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel VBA】取り込んだファイ...
-
0バイトのテキストファイル
-
VBAで、JPG写真の撮影日時を読...
-
HTMLテキストリンクでExcelファ...
-
Eclipseで検索ができなくなった
-
HTMLまたはJavaScriptでフ...
-
【VBA】複数CSVの特定範囲を1つ...
-
ディレクトリのサイズの取得
-
サイトマップにサブドメインを...
-
Javaのファイルダウンロードに...
-
リソースファイルを認識してく...
-
VBS ファイルマージ処理
-
C++.NET 2003 「空のドキュメ...
-
VB6.0のメモリリークについて
-
C++によるファイル送受信プログ...
-
RPGでメッセージファイル利用
-
Perlで2GBを超える大きいファイ...
-
VB6でTIFF図のプロパティを...
-
BASP21のファイルアップロード...
-
VB2008 iniファイルの全セクシ...
おすすめ情報