メモリ漏れ漏れ。

メモリリーク の通り、現在 IE6 で発生するメモリリークの問題を調査中。

色々試してみた結果一番簡単な解決策は、再度 Main.html ファイルを読み込んでダイアログ内部を再構成すること。これで、スパッと漏れたメモリが開放されます orz (頭悪すぎ)

というわけで、漏れたメモリを定期的に取り戻す方法も考えてみたいと思います。もしこの方法を採用するとしたら、正式対応は IE7 以上にするしかないですね。悲しいですが。

まだ時間があるのでもう少し試行錯誤してみます。これだけ普通に innnerHtml が使われているわけですから、メモリが漏れない方法もあるはず。

CDHtmlDialog で幸せになれると思っていたのですが、私の力ではなかなか難しいようです。

— 追記 —

JavaScript から使う分にはまったく問題ないので、やっぱり私のやり方に問題があるんだろうなぁ。

って、待てよ。JavaScript から使う分には問題ないのであれば、健康状態などに応じて対応する class に書き換えるルーチンを JavaScript で書いてそれを C++ からコールすれば出来るんじゃまいか。ファイルを再読み込みするよりは幾分マシか orz

明日はこの方法を試してみますかね。エレガントではないけれどメモリが漏れるよりは 100 万倍ましです。

— 追記 (2008/4/11 8:30) —

JavaScript 経由で innerHtml しても IE6 ではメモリが漏れるようです。innnerHtml のアプローチは諦め、クラス名を変更するだけで対応できるように Main.html 構成を検討してみます。

— 追記 (2008/4/12 7:50) —

解決しました。(ようやくメモリリーク問題解決)

おすすめ

5件のフィードバック

  1. Kouichi より:

    ぜひ hiyohiyo氏にはがんがってもらって、IE6のエンジンでもメモリリークなく
    レンダリングができるようにしてもらいたいです。
    「をれはぜってーにIE7なんかいれねーぞ」とか「IE7は禁止されてるんだYO!」って人も多いでしょうから。
    (特に企業内などでは)

    ヨコ漏れ防止と後ろに長い…で。って なに書いてるんだ、をれは。(汗)

  2. hiyohiyo より:

    >> Kouichi さん
    IE6 で動きません。というわけにはいかないので、解決方法を鋭意検討中です。原因はわかっているので、そのうち回避策にたどり着けると思います。しばしお待ちください。

    それにしても、IE6 の寿命は長いですねぇ~

  3. Chi より:

    個人的にはIE7使用時にメモリーリークしない方が不思議だったりします。
    IE=メモリリークという印象しかないので(それでもメインはIEもしくはIEエンジン使用ブラウザ)
    CrystalDiskInfoはWin2K+IE5って環境では動くのでしたっけ。動く場合にリークがあるかが興味も。

  4. hiyohiyo より:

    > Chi さん
    普通の IE6 から innerHTML を JavaScript から使う分には問題ないので。CrystalDiskInfo での使用方法に問題がある可能性は当然あります。ただ、標準機能として提供している DDX/DDV 経由で innnerHTML しても API として提供されている SetElementText 経由で innerHTML しても同じようにメモリリークが発生するので、CDHtmlDialog から innerHTML する場合にのみ発生する『何か』があるような気がします。なお、innerHTML を行ったとしても置換する文字列にタグが含まれていない場合はメモリリークが発生しませんし、ページを再読み込みするとメモリが開放されることから、タグを使って生成したエレメントを更新する際に以前のエレメントを削除する処理がうまく機能していないと考えています。(API 内部はステップ実行できないので推測ですが。逆アセンブル結果をステップ実行しても私にはさっぱりわかりませんし)

    Win2k + IE5 環境では正常動作しません。PNG の半透明機能が利用できないので。メモリリークについて試すのは簡単ですが、手元の Virtual PC 環境に Win2k + IE5/IE5.5 がないため確認はしておりません。

  5. hiyohiyo より:

    > Chi さん
    Win2k + IE5 が見つかったので試してみたところ全く同じようにメモリリークが発生しました。IE7 から治ったということのようです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です