メモリリーク
名無しさんの指摘を受け、メモリリークの調査を行っているのですが、私が試した限りどうやら IE6 環境でのみ発生するようです。
◇テスト方法
CrystalDiskInfo 起動後 F5 押しっぱなしでひたすら更新を行った状態で、Process Explorer で Private Bytes と Working Set の変化を確認。(タスクマネージャのメモリ使用量は別の要因で変化するので…詳細は インサイド Windows 第四版 で勉強中)
◇テスト環境
Windows Vista SP1 + IE7 : OK
Windows XP SP2 + IE7 : OK
Windows XP SP2 + IE6 : NG
Windows 2000 SP4 + IE6 : NG
NG : 更新(F5) の度に使用メモリが増える
色々ソースをいじりながら調査を進めたところ、
DDX_DHtml_ElementInnerHtml(pDX, _T(“DriveStatus”), m_DriveStatus);
DDX_DHtml_ElementInnerHtml(pDX, _T(“Temperature”), m_Temperature);
m_DriveStatus.Format(_T(“<div class=\”%s\”>%s</div>”), className, diskStatus);
m_Temperature.Format(_T(“<div class=\”%s\”>– °C</div>”), className);
のように、InnerHtml で div タグを入れている部分が問題のようです。試しに div タグを取り除いたところメモリリークはなくなりました。
デザイン上単純に div タグを取り除くことはできないので、IE6 でもメモリリークが起こらない方法を模索したいと思います。(InnnerHtml の使い方が不適切なのだけかもしれないので色々調査してみます。)
必ずこの問題を解決した上で正式版にします。
当面は IE6 環境においてメモリリークが発生していることをご了承ください。
3件のフィードバック
[…] メモリリーク 4 月 […]
[…] メモリリーク の通り、現在 IE6 で発生するメモリリークの問題を調査中。 […]
[…] メモリリーク の問題は本当に苦労しました。今のところ IE6 環境での根本的な改善に至っておりません(恐らく至らない)ので、CrystalCPUID 5 -Estel- の常駐機能は本体と分離し、CDHtmlDialog を使わない別実行ファイルとする方法も検討する必要がありそうです。 […]