結果としては「<div></div>」1つを追加すると250バイトぐらい増えるようです。
innerTextプロパティを書き換えることで対象エレメントの子要素を削除する方法でもメモリ使用量が低下することが確認できました。
試験結果

試験用ソース
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<title>試験</title> | |
<body> | |
<div id=div0></div> | |
<div id=div1></div> | |
</body> | |
<script> | |
resizeTo(400,400) | |
onload=function(){ | |
var 試験回数=1000000 | |
var doc=document | |
var a=function(){ | |
div1.insertBefore(doc.createElement('div')) | |
} | |
var s=getメモリ使用量() | |
for(var i=0;i<試験回数;i++){ a() } | |
var e=getメモリ使用量() | |
div1.innerText = '' | |
var e0=getメモリ使用量() | |
div0.innerText = ['試験回数:'+試験回数, 's:'+s, 'e:'+e, 'e-s:'+(e-s), '一回あたり[KB]:'+((e-s)/試験回数), 'e0:'+e0, 'e-e0:'+(e-e0)].join('\n') | |
} | |
getメモリ使用量=function(){ | |
var res = new Enumerator(GetObject("winmgmts:root\\CIMV2").ExecQuery("SELECT * FROM Win32_Process where ProcessID="+getPID())) | |
return res.atEnd() ? (void 0) : res.item().PageFileUsage | |
} | |
getPID=function(){ | |
var f=function(){ | |
// 子プロセスをcscriptにすると黒い画面が一瞬表示されてしまう。 | |
// 「//B」オプションを付けないとwscriptの設定画面が表示されてしまう。 | |
var childPID = (new ActiveXObject('WScript.Shell')).Exec('wscript //B').ProcessID | |
// 子の親(自身)のPIDを特定する | |
var res = new Enumerator(GetObject("winmgmts:root\\CIMV2").ExecQuery("SELECT * FROM Win32_Process where ProcessID="+childPID)) | |
return res.atEnd() ? (void 0) : res.item().ParentProcessID | |
} | |
// 1度目で取得に成功すればその値を返し、ダメなら2回目の処理を実行する。 | |
return f() || f() | |
} | |
gt=function(){return (new Date()).getTime()} | |
loop試験 = function(回数, fun){ | |
for(var s=gt(),i=0;i<回数;i++){ fun() } | |
return gt() - s | |
} | |
</script> | |
</html> |
「PageFileUsage」に入っている値の単位に関する情報が見つかりませんでしたが、試験結果とタスクマネージャの表示を比較した結果「KB」だろうと推測しました。

0 件のコメント:
コメントを投稿