私はこの問題に3日間苦労しており、誰かがまだ私を助けてくれないちょっとした情報を持っていることを望んでいます(私は必死です!)。コンテキストを提供するには:
ブラウザ: IE9.0.8112.16421 (64 ビット); jQuery バージョン: 2.0.2
基本的に私がやっていることは、単純な ajax 呼び出しを行い、成功ハンドラーを介して要素に挿入する情報を取得することです。関連するコード行を以下に示します。
var onLoadViewGroupSuccess = function(data) {
var target = $("#viewGroupContent");
//for(var i=0;i<1000;i++) {
target.empty().html(data);
//}
}
ターゲットは、次の html タグに対応します。
<tr id="viewGroupContent">...</tr>
上記のコメント アウトされた for ループは、問題を拡大することを目的としています (単一のイベント クリック トリガーでは検出が困難です)。基本的に、ループが設定されている場合、1 回の呼び出しのメモリは 46MB から最大 113MB になります。
後続の呼び出しは、メモリが継続的に増加している状態で同じ動作を示します。最初は、クリーンアップに失敗したいくつかのイベントハンドラーの問題だと思っていましたが、ほとんどすべての JavaScript ロジックをコメントアウトしたため、これを除外しました。呼び出された) - つまり、閉鎖の問題ではありません。
for ループを ajax 呼び出しの外側に移動すると (つまり、1000 回の ajax 呼び出しを行う)、同じメモリ プロファイルが得られます (そのため、あいまいな ajax メモリ リークが排除されます)。挿入しているコンテンツは、かなりの量のコンテンツ (つまり、画像を含むと考えることができるすべての HTML タグのインスタンス) を含む TD タグであるため、挿入しているコンテンツがリークの原因であるかどうか疑問に思っています。
私は、最も有望と思われる以下を含む、IE自体のクリーンアップ機能に関するいくつかの興味深いブログ投稿を読みました( http://com.hemiola.com/2009/11/23/memory-leaks-in-ie8/ )。残念ながら、これまでのところ解決策や回避策はありません。
私は自分のアプリを最小限の骨まで取り除いてしまい、あなたができることはあまりないので途方に暮れています$(...).empty().html(...)
。メモリ リークは遅いですが、永続的です....
また、参考までに、innerHTML、DOM メソッドを使用してテーブル行を削除して再構築し、ajax コンテンツをテーブル セルに挿入し、破棄されたコンテンツをごみ箱 DIV に移動してから、innerHTML を呼び出す非 jQuery ソリューションを試しました。 、すべて役に立たず、多くの場合、漏れを悪化させます...