asp.net使用Ajax+jquery+定时器,在IE(8--9)中导致内存无限增长,内存泄露
来源:互联网 发布:php base64 编辑:程序博客网 时间:2024/05/16 11:33
在公司的项目中有这样一个功能,使用定时器定时(5秒)执行一个方法,在方法中使用jquery的ajax请求后台返回数据,返回的数据是生成好的Html代码直接将其赋值给页面中的div使用jquery的$("#demoID").html()方式赋值。本来是没有问题的,但是在网页打开一段时间后就会出现内存疯狂的增长,每隔几分钟就增长到了500多兆,并且CPU的占用率也达到了40%-%50几,这时网页就会出现卡死现象。通过查找各类资料发现这是由于内存泄露导致内存一直增长。导出内存泄露的主要代码
function loadData() { $.ajax({ url: 'post.aspx', success: function (data) { $("#historialPanel").html(data); setTimeout("loadData()", 5000); }, error: function (data) { $("#historialPanel").html(errorInfo); setTimeout("loadData()", 5000); } }); }
通过问题的查找发现可能是由于一下原因造成的。
1、使用jquery的html方法赋值引起的(因该函数不是基于innerHTML实现的)
2、可能是js没有进行垃圾回收
3、可能是定时器使用之后没有销毁
第一步加入了ie下可以使用的垃圾回收方法每隔十秒执行一次和每次执行完方法后将定时器销毁,发现效果虽有改善但是还是没解决内存增长的原因。
window.setInterval("CollectGarbage();", 10000);
第二步就将jquery的html赋值方式改为了js的赋值方式
function loadData() { var setOut; $.ajax({ url: 'post.aspx', success: function (data) { document.getElementById("historialPanel").innerHTML = data; if (setOut != undefined) { delete setOut; } setOut = setTimeout("loadData()", 5000); }, error: function (data) { document.getElementById("historialPanel").innerHTML = errorInfo; if (setOut != undefined) { delete setOut; } setOut = setTimeout("loadData()", 5000); } }); }
修改之后发现在IE浏览器中浏览时内存增长速度趋于稳定状态,还有一点小幅度的增长但都会自动降下来。
到此问题解决,本想将这个问题重现到自己的网站上,但是发现无论如何都不会出现内存增长的问题,所以我想可能是由于在公司的网站使用的定时器很多和使用了很多的jquery的html方法导致的。到最后在小幅度的增长的内存也可能是这个原因。等有机会在去进一步的排查!
后记:
在解决这个问题时发现在使用定时器定时执行ajax时如果不注意对象的引用而导致对象一直没有被释放就很有可能出现内存一直增长的问题。所以以后遇到同类的问题第一个排查方向就是查找是不是有使用之后没有释放的对象,如果实在不行就将jquery的方法改为js的原生方法来执行。
最后:
谢谢RJS的前辈们帮我提出的查找问题的方向,刚开始遇到这个问题感觉从哪里查找都不知道,所以非常感谢!
0 0
- asp.net使用Ajax+jquery+定时器,在IE(8--9)中导致内存无限增长,内存泄露
- ASP.NET动态Assembly导致的内存泄露
- IE内存泄露之JQuery html(),append()
- Android中Handler使用不当导致内存泄露的问题
- Activitys中使用线程导致的内存泄露
- 在Asp.net中使用jquery实现Ajax
- 在Asp.net中使用jquery实现Ajax
- 在Asp.net中使用jquery实现Ajax
- 在Asp.net中使用jquery实现Ajax (转)
- JQuery Ajax 在asp.net中使用总结
- JQuery Ajax 在asp.net中使用总结
- JQuery Ajax 在asp.net中使用总结
- JQuery Ajax 在asp.net中使用总结
- JQuery Ajax 在asp.net中使用总结
- uWSGI定时器导致web.py的内存泄露问题
- JQuery AJAX & JSON 使用示例一步到位 (DEMO:ASP.NET + MSSQL 无限级树形菜单)
- Volley中listener导致的内存泄露
- 使用self. 导致的内存泄露
- javaScript & jquery完美判断图片是否加载完毕
- Android源码学习笔记-Android系统框架
- 在导入eclipse项目到Android Studio出现这样的错误, 非法字符: '\ufeff' 解决方案|错误: 需要class, interface或enum,查阅后了解到Eclipse可以智
- UIImage加载图片的方式以及Images.xcassets对于加载方法的影响
- 第十二条:考虑实现Comparable接口
- asp.net使用Ajax+jquery+定时器,在IE(8--9)中导致内存无限增长,内存泄露
- Class.forName的作用以及为什么要用它【转】
- mysql 分表与分区
- 自定义EasyUI下拉单选和下拉多选控件
- typedef 在结构体中的应用
- Java SpringMVC项目导入excel2003以及2007多版本自动识别对应工具类(util)
- maven切换环境配置
- scrapy使用时的一些错误及解决方法
- selenium快速上手