我们使用ajax接收后台的监控数据,在前台显示,大概2秒一次访问,发现ie的内存有波动,但总体上一直在向上涨。
写了个简单的测试程序
var testCB = function(){
var a = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
for(var i = 0 ; i < 100000; i++){
testCB();
}在ie空白页下按“F12”,弹出开发人员工具,在脚本的控制台下贴上代码,运行几次,就发现ie的内存长了几十k,也不会减下来。虽然这个只有几十k,但当监控数据数量大的时候,涨的就更多了。在我们的环境里,当ie内存涨到1.4G时,ie就会挂了。好像是ie有内存使用限制?有没有这方面有经验的朋友指引下:
1:是不是有方法能使上面的程序不内存泄露。
2:ie是不是有内存使用限制,是不是能提高限制。
写了个简单的测试程序
var testCB = function(){
var a = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
for(var i = 0 ; i < 100000; i++){
testCB();
}在ie空白页下按“F12”,弹出开发人员工具,在脚本的控制台下贴上代码,运行几次,就发现ie的内存长了几十k,也不会减下来。虽然这个只有几十k,但当监控数据数量大的时候,涨的就更多了。在我们的环境里,当ie内存涨到1.4G时,ie就会挂了。好像是ie有内存使用限制?有没有这方面有经验的朋友指引下:
1:是不是有方法能使上面的程序不内存泄露。
2:ie是不是有内存使用限制,是不是能提高限制。
刷新无效是IE6/7的垃圾收集器算法BUG,这个可以改变写法解决。最好的办法还是放弃IE6
另外,我现在一般在IE8和9上跑,还是会有内存涨的现象。
如果内存涨没有办法,那能不能提高IE内存使用的限制呢,好像是当IE涨到1.4G时,系统就挂了。IE是不是有内存使用限制,是不是能提高限制。
for(var i = 0 ; i < 100000; i++){
testCB();
CollectGarbage();
}至于绘图的内存增长,多半就是内存泄露了,打开任务管理器,把gdi对象列显示出来,看看ie的gdi数量是否一直在增长,若你的程序逻辑不会一直增加图形,而事实上gdi一直增加,说明必然有内存泄露
var testCB = function(){
var a = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"function test(){
//如果这里使用了a就会闭包,内存就会一直增大
}}
for(var i = 0 ; i < 100000; i++){
testCB();
}
将a定义为全局变量这样就行var a;
var testCB = function(){
a = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
}
for(var i = 0 ; i < 100000; i++){
testCB();
}
<script>
parent.doSomething(date)
</script>
因为不用不停的建立ajax,内存应当增长比较慢。这也是一种即时聊天的方案。
另外3D是IE ONLY?
页面自己的泄露问题,看了各位老大的指点很有启发,我做些测试再和大家讨论
这个是正解,你定义了100000个变量,每个变量都占用内存空间,内存占有率肯定增长,可以在变量使用完成后,用变量=undefined 来释放内存,在net、java中不需要对变量释放,是因为有垃圾回收机制帮你回收释放了,在javascript中,可没有人帮你回收。