1、  现象

每次动态添加iframe时,iexplore.exe进程占据的内存都会增加(大概10M左右),不会自动释放,最终导致内存溢出

2、  解决过程

经过网络的一番搜索,基本上给出的解决方案是清空iframe内容,并移除iframe节点。方法如下:

  var el = document.getElementById("IFrame1");

            if (el) {
iframe = el.contentWindow; //清除文档
el.src = 'about:blank';
try {
iframe.document.write('');
iframe.document.clear(); CollectGarbage();
} catch (e) { }; //清除节点
var _parentElement = el.parentNode;
if (_parentElement) {
_parentElement.removeChild(el); }
}

此方法在重新加载iframe时都会释放一定的内存(可以从进程中看到内存的变化),但加载后新增的内存比释放的内存要多很多,再多次加载后还是会导致内存溢出

还有的说是IE的bug,要用CollectGarbage()函数进行垃圾回收,但经过测试,此函数没有效果,内存溢出也不仅仅在IE存在,火狐和谷歌浏览器都有此现象,只是溢出程度较轻

使用$.get替换iframe动态加载html,同样会导致内存溢出,看来不是iframe的原因

 $.get(src, function (data) { //初始將a.html include div#iframe
$("#center").empty();
$("#center").html(data);
});

3、结论
  上述方法确实释放了一定的内存,但动态加载新的iframe后溢出了更多的内存,看来不仅仅是这方面的原因。后来经过调试代码,发现iframe页面引入了大量的js库,大概有几十种,如果删除一些内存溢出现象就会得到缓解,看来这就是原因。下一步准备对js库进行压缩和合并,看能否降低内存溢出。

添加IFrame导致内存溢出的解决过程(IE浏览器,目前发现了原因,还未解决)的更多相关文章

  1. POI读写大数据量excel,解决超过几万行而导致内存溢出的问题

    1. Excel2003与Excel2007 两个版本的最大行数和列数不同,2003版最大行数是65536行,最大列数是256列,2007版及以后的版本最大行数是1048576行,最大列数是16384 ...

  2. WPF循环加载图片导致内存溢出的解决办法

    程序场景:一系列的图片,从第一张到最后一张依次加载图片,形成“动画”. 生成BitmapImage的方法有多种: 1. var source=new BitmapImage(new Uri(" ...

  3. php查询mysql返回大量数据结果集导致内存溢出的解决方法

    web开发中如果遇到php查询mysql返回大量数据导致内存溢出.或者内存不够用的情况那就需要看下MySQL C API的关联,那么究竟是什么导致php查询mysql返回大量数据时内存不够用情况? 答 ...

  4. Android加载图片导致内存溢出(Out of Memory异常)

    Android在加载大背景图或者大量图片时,经常导致内存溢出(Out of Memory  Error),本文根据我处理这些问题的经历及其它开发者的经验,整理解决方案如下(部分代码及文字出处无法考证) ...

  5. String的replace导致内存溢出

    从一次内存溢出来看JDK的String应该怎么用 背景 JDK在String类中给我们提供的API,replace是个使用频率很高的的方法.因为他可以对字符串内容进行替换,只需要输入替换字符串和被替换 ...

  6. 图片--Android加载图片导致内存溢出(Out of Memory异常)

    Android在加载大背景图或者大量图片时,经常导致内存溢出(Out of Memory  Error),本文根据我处理这些问题的经历及其它开发者的经验,整理解决方案如下(部分代码及文字出处无法考证) ...

  7. Restful规则及JPA导致内存溢出

    HTTP动词 对于资源的具体操作类型,由HTTP动词表示. 常用的HTTP动词有下面五个(括号里是对应的SQL命令). GET(SELECT):从服务器取出资源(一项或多项). POST(CREATE ...

  8. PDO之MySql持久化自动重连导致内存溢出

    前言 最近项目需要一个常驻内存的脚本来执行队列程序,脚本完成后发现Mysql自动重连部分存在内存溢出,导致运行一段时间后,会超出PHP内存限制退出 排查 发现脚本存在内存溢出后排查了一遍代码,基本确认 ...

  9. Java线程池队列吃的太饱,撑着了咋整?java 队列过大导致内存溢出

    Java的Executors框架提供的定长线程池内部默认使用LinkedBlockingQueue作为任务的容器,这个队列是没有限定大小的,可以无限向里面submit任务. 当线程池处理的太慢的时候, ...

随机推荐

  1. 服务器多块磁盘 ,同时磁盘类型混合(SSD+STAT+SAS)

    服务器多块磁盘 ,同时磁盘类型混合(SSD+STAT+SAS)

  2. jquery让一个点击事件刷新页面就自己执行一次的方法

    $('name')这个元素之前已经绑定过事件啦,(on绑定)然后直接调用下即可: $('name').click();

  3. 两年内从零到每月十亿 PV 的发展来谈 Pinterest 的架构设计(转)

    原文:Scaling Pinterest - From 0 To 10s Of Billions Of Page Views A Month In Two Years 译文:两年内从零到每月十亿 PV ...

  4. 关于 3750 vlan 设置

    >#config int vlan 1                \\进入vlan1,vlan 1 是默认存在的,你不能改名字,也不能删除.你也可以建个新的vlan做你的管理口. ip ad ...

  5. redis缓存数据表

    直观上看,数据库中的数据都是按表存储的:更微观地看,这些表都是按行存储的.每执行一 次select查询,数据库都会返回一个结果集,这个结果集由若干行组成.所以,一个自然而然 的想法就是在Redis中找 ...

  6. Windows下Mysql5.6启用监控执行脚本的日志

    修改my.ini (我的MySQL安装位置是:E:\MySQL\MySQL Server 5.6) log-output=FILE general-log=1 general_log_file=&qu ...

  7. c# 解决IIS写Excel的权限问题

    c# 解决IIS写Excel的权限问题 from: http://www.jb51.net/article/31473.htm 发布:mdxy-dxy 字体:[增加 减小] 类型:转载 使用以上方法必 ...

  8. gb2312和UTF-8的区别

    GB2312编码大约包含6000多汉字(不包括特殊字符),编码范围为第一位b0-f7,第二位编码范围为a1-fe(第一位为cf时,第二位为a1-d3),计算一下汉字个数为6762个汉字.当然还有其他的 ...

  9. 分享一下jQuery UI的地址

    jQuery EasyUI: http://www.jeasyui.com/ DWZ: http://j-ui.com/ Liger UI: http://www.ligerui.com/ Liger ...

  10. eclipse 最有用的10个快捷键

    1Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升.    ...