ajaxで定期的に鯖から何かget、とかさせていると、そのたびに4K〜16Kほどのメモリを食って、離さにゃい気がする@IEの件で、とりあえず何とかにゃったのでメモ。
まずリークする場合の、激しく簡略化したソース。
function post2(arg){
var req = new ActiveXObject("Msxml2.XMLHTTP");
req.onreadystatechange = function(){
if(req == undefined) { return 9; }
if(req.readyState != 4) { return 4; }
if(req.status != 200) { return 2; }
window.status = "ok";
setTimeout('post2()',1000);
}
req.open("POST", "./?mode=test", true);
req.send("test"+arg);
}
よくそこらへんで紹介されてる方法にゃんだが、reqが開放されずに残るのよね。にゃのでしばらく放置しておくとIEの使用メモリが50Mとかににゃってたりする。
ので、使用後(ここではsetTimeoutの後とか)にreq = null;しにゃければにゃらにゃい。
こんにゃメモリ管理はお任せのつもりだったので、身近にゃ低機能言語としてマーク。うーん、そりゃまぁ使わにゃくにゃったかどうかの判定て難しそうだけど、ダメにゃ場合はダメとリファレンスに大きく載せておくべきだと思うにゃぁ。読んだこと無いけど。ページ丸ごと書き換え〜とかしてると数k単位どころか1M単位で使用メモリが増加するんでは無かろうか。
あと、こういう単純にゃ構造にゃらreq = nullを1つ入れれば解決にゃんだが、もっと構造がぐちょってたり、DOM関連で入れ子してたりするとたぶんこの程度では無理と思われる。再帰で
for(var x = obj.length;x--;){
obj[x] = null;
delete obj[x];
}
して末端までnullで埋めたり、グローバル変数を
var n=乱数;
eval("TMP_"+n+"=obj");
で確保しておいて、nを参照せずにそのまま受け渡すとか(笑)
いろいろダメっぽい解決法を考えてみたが非常にアレにゃので、おしえておねがいさみあドン。
さらにメモだが、上と関係にゃいところで基本的ハマり要素として、
X=[];
n=5;
X[n]=0;
X[n]=null;
delete X[n];
とかしても、X[n]が確保したメモリは解放されにゃい。検証してにゃいけど、一度確保した連想配列は開放されにゃいというか何というか。よって、perlのハッシュのように用いるとえらいことににゃる(笑)
上の変数reqをグローバルにゃ配列に作っちゃえば安易に消せるだろうと思って組んだら、配列Xそのものを消さにゃいとメモリ解放されにゃかったりしてハマったわけで。
しかも、この手の配列を参照するときに線形検索してるようにゃ気がする。よくわからんが変に遅い。もうめんどくさいからperlのハッシュ機構載せてくれと。
それにしてもこの問題、根が深いにゃぁ。IEが単にダメってことだと思うけど、例えばgoogle newsを1週間くらい開いていたIEって数百Mもメモリ食ってるわけで、根本的にゃところでやばいことが起きてそうにゃ気がする。
プリンセスソフィー登場
「今日は同じ負け組同士、がんばりましょうね☆」
すげええ(爆) このくらいの台本密度が続けばほんと神懸かったものににゃるのににゃぁ。
ところで兄に連行されるアルテッサが萌え
久々、リオーネ。やっぱり牙が素晴らしい。
各国のプリンセスも良い感じ。しずくの国の丸耳姫とか
。
そんにゃとこまでリアルにせんで良い感じのミルキーとか
。
でもって今回も良いところのにゃいティオと、駆け寄ってみたものの手を出しにくいリオーネの姿勢が良すぎ。プリンセスらしいかどうかで言えばやはり最もプリンセスらしいのでは無かろうかと思うね。
無駄に抜きん出てる人
、反則
、獅子パワーと今回は見所が多い。
そして獲物を食いちぎった後の満足そうにゃリオーネの表情が。
。
一方ではソフィー節が炸裂していて目が離せにゃい(笑)
ていうかそのでかい耳について誰か言及してくれ。
うわ丸耳姫めちゃ気が弱い
。リオーネだけかと思ったら・・・。
借り物ネタはティオのしっぽ
。にゃんでリオーネじゃにゃいかにゃぁ。まぁ萌えだけど
。
にゃんか犬の糞の処理してます〜てイメージににゃりつつあるソフィー
。もうちょっとにゃんとかにゃらんか(笑)
で、ビリの人に最もめんどくさい課題が当たる法則
。
意外にゃ一面ていうか秘めたる獣の側面発動ってことで、騒動の発端を作るリオーネ(笑)
帽子の有無がちゃんと区別されてるプロミネンス(但し失敗)
何かに似てるんだがよく分からん動物系の滴の国の丸耳姫
。
ということで久しぶりに笑いました。リオーネも良い感じ。双子は比較的どうでも良いので、今後も周辺諸国の姫達を追っかけて欲しいにゃ。