ABのメモリ関係?バグ

ActiveBasicのバグと思われる不具合を発見された方は、こちらから知らせていただけると助かります。
返信する
メッセージ
作成者
mako20
記事: 26
登録日時: 2005年5月31日(火) 01:10
お住まい: 岡山県
連絡する:

ABのメモリ関係?バグ

#1 投稿記事 by mako20 »

ABを長時間(連続でコンパイルなどをした時)使っていったら、メモリと考えられますが使っていくと徐々にウィンドゥの位置とツールバーのドロップダウンがバグってごちゃごちゃになってしまいます。
それと、コンパイルする前にオプションで表示可能な
ファイルの保存確認ダイアログが、超シンプルなダイアログになってしまいます

物理メモリ:256MB(コンピュータ上での表示では、224MB)
OS:WinXP Home SP2

追記
CPU: AthlonXP 2200+
AB:4.02.01
最後に編集したユーザー mako20 [ 2005年7月15日(金) 19:33 ], 累計 2 回
ナナシ
記事: 11
登録日時: 2005年6月19日(日) 21:21
お住まい: 石川県
連絡する:

#2 投稿記事 by ナナシ »

同様の現象に遭遇したことがあります。

ハンドルの解放を忘れたときの症状に非常によく似ていたため、
タスクマネージャでGDIオブジェクト数を表示させてみたところ、
キー入力やコンパイルを行った時に増える一方で、減る気配がありません。
増えるタイミングを調べてみたところ、コード編集画面の再描画時に
増えているように見えました。RADやアイコン編集画面は関係ないようです。

環境によって変わるかもしれませんが、GDIオブジェクトの値が9900を
越えるころになると描画がおかしくなります。

■環境
AB 4.02.01
OS:Windows2000Pro SP4
MEM:768MB
CPU:AthlonXP 1700+
hira
記事: 203
登録日時: 2005年5月31日(火) 20:14
お住まい: 兵庫県
連絡する:

#3 投稿記事 by hira »

私もそういう事態によく遭います。
起こった場合は、そこで一旦ファイルを上書き保存して終了する、そしてもう一度ABを起動、で対処しています。
確かAB3ではこんなことは起こらず、AB4になってから起こるようになったように思います。

AB 4.02.01
Windows XP Home Edition (SP2)
RAM: 480MB (実際は512MB入っているが、VRAMが32MB使用しているため)
CPU: Pentium 4 2.0GHz で確認。
ナナシ
記事: 11
登録日時: 2005年6月19日(日) 21:21
お住まい: 石川県
連絡する:

とりあえず

#4 投稿記事 by ナナシ »

まだ正式対応されていないようですので、GDIオブジェクトを消費し続ける
現象を回避する補助プログラムを組んでみました。

http://www.uranus.dti.ne.jp/~kpnanasi/a ... ml#PatchPE

に置いておきますので自己責任にてご自由にお使いください。

とりあえず使ってなさそうなGDIオブジェクトを解放するようになってます。

ただし、これはあくまで私が勝手に作成した補助プログラムであるため、
公式なものではありません。
また、ProjectEditorのバグ報告を行う際は、この補助プログラムを
使っていない状態で確認していただくようお願いします。
ナナシ
記事: 11
登録日時: 2005年6月19日(日) 21:21
お住まい: 石川県
連絡する:

#5 投稿記事 by ナナシ »

gdi32.dllをフックしてリソースの確保~解放を調べてみたところ、
コード入力ウィンドウの再描画時に使っているExtSelectClipRgnで
使ったリージョンハンドルが未解放になってるみたいです。

MSDNのExtSelectClipRgnの説明には、

この関数は、hrgn パラメータで指定したリージョンのコピーを使います。
指定したリージョンそのものは、関数呼び出し後も有効です。

とあるので解放しないとまずいと思います。

# このリソース解析ツール、色々応用が利きそうなので拡張してみます。
山本
Site Admin
記事: 535
登録日時: 2005年5月30日(月) 15:08
連絡する:

#6 投稿記事 by 山本 »

ナナシ さんが書きました:gdi32.dllをフックしてリソースの確保~解放を調べてみたところ、
コード入力ウィンドウの再描画時に使っているExtSelectClipRgnで
使ったリージョンハンドルが未解放になってるみたいです。

MSDNのExtSelectClipRgnの説明には、

この関数は、hrgn パラメータで指定したリージョンのコピーを使います。
指定したリージョンそのものは、関数呼び出し後も有効です。

とあるので解放しないとまずいと思います。
ご報告ありがとうございます。調べたところ、ナナシさんの仰るとおり、リージョンハンドルがDeleteObjectされていませんでした。次回のバージョンアップで修正しますので、今しばらくお待ちください。
ケースケ
記事: 45
登録日時: 2005年5月31日(火) 23:46
お住まい: 愛知県
連絡する:

また発生しました

#7 投稿記事 by ケースケ »

ABの最新版(4.1)を使っていたら、またスクロールバーがずれました。

以前より発生するまでの時間がかなり長くなりましたが、6時間ほど続けてソースをさわりつづけると発生しました。(普通はこんなに続けませんね、引きこもりならではのエラー報告です)

ナナシ様のような技術的な報告はできませんが、長いソース(500行超)を表示して、スクロールバーを上下にブンブン振り回すとどんどんGDIオブジェクトの数が増えます。

耐性テストの結果のようなバグ報告ですが、できればよろしくお願いします。
返信する