这就是我设置的方式:
这是一个数组样本(从6000多行缩短为2行):
var database1=[[
"2010-01-03 07:45","2010-01-03 11:00","534","A","","","","","Installed washing machine","0","1","1","Indeed","",""],[
"2010-03-20 15:00","2010-03-20 16:00","571","F","","","","","Installed oven","0","5","1","Indeed","",""],[
etc,etc,etc...]];
Run Code Online (Sandbox Code Playgroud)
当我将database1.js附加到容器的头部时,windows中用于IE的内存从7,7MB跳到21,9MB.这很好,我现在可以通过名为database1的数组循环(第一行和第一列是在database1 [0] [0]).
问题是我需要不时地重新附加数据库文件,这样做会增加内存使用量(我以为数据库阵列会被覆盖).
因此,第一次重新添加将IE中的内存使用量提高到30,4MB,但随后每次重新添加时继续增加:30,4MB> 33,9MB> 39,5MB> 42,1MB等.
为了防止这种情况发生,我现在清除数组中的每个项目,然后再重新附加database1文件.
for ( var i=0, il=database1.length; i<il; i++ ){
delete database1[i];
}
//append database1.js to head code here
Run Code Online (Sandbox Code Playgroud)
这确实有帮助.内存使用率不会降至最初的7,7MB,但会从21,9MB减少到14,1MB.下一次重新添加会将内存增加到25,9MB(使用循环清除:18,8MB).下一次重新添加会将内存增加到29,3MB(使用循环清除:24,5MB).
我很高兴内存使用率没有快速攀升,但也许这可以进一步优化?不幸的是,重新加载HTML页面不是一种选择.
Java中的内存管理由垃圾收集器辅助,垃圾收集器是一种语言功能,可以定期释放不再需要的内存.
的delete
操作者基本上表示的内存区域为被不再需要.当垃圾收集器下次运行时,内存将被释放.
垃圾收集是不可预测的 - delete $var
或者$var = null
将允许垃圾收集器最终释放内存.这可能不是即时的.这就是为什么内存使用不会像你期望的那样快速攀升的原因,这就是为什么delete $var
不能像你期望的那样快地减少内存使用.
IE确实提供了一种强制垃圾收集器运行的方法:
if (typeof(CollectGarbage) == "function") {
CollectGarbage();
}
Run Code Online (Sandbox Code Playgroud)
在发生这种情况时,您的脚本可能会变慢,特别是在有大量内存要解除分配时.
最好避免强制垃圾收集 - 让垃圾收集器在它确定最合适的点运行.CollectGarbage()
也没有记录 - 行为可能会改变,或者可以随时删除功能.
简而言之:
delete database1[i]
是你能做的最好的 归档时间: |
|
查看次数: |
1187 次 |
最近记录: |