jQuery的Ajax请求,导致浏览器内存泄漏,不断狂涨

gg_show 2010-08-03 02:21:51
最近为了jQuery的事搞的自己对jQuery失去了信心

前台:
<head runat="server">
<title></title>

<script src="js/jquery-1.4.2.js" type="text/javascript"></script>

<script language="javascript" type="text/javascript">
//表格的行数
var $index = 20;
//返回的行数
var $ICount = 0;

$(document).ready(function() {
CreateTable();
BindTable();
});

function CreateTable() {
$TableStr = "<table width='100%'>";
for (i = 0; i < $index; i++) {
$TableStr += "<tr id='trs" + i + "'><td></td><td></td><td></td><td></td></tr>";
}
$TableStr += "</table>";
$("#LoadTable").html($TableStr);
$TableStr = null;
}

function BindTable() {
$.getJSON("json_Page.ashx?rid=" + Math.random(), ss);
}


function ss(data) {
$.each(data, EachData);

for (i = 0; i < $index; i++) {
$("#trs" + i).css("display", "block");
}
for (i = $ICount; i < $index; i++) {
$("#trs" + i).css("display", "none");
}
}

function EachData(i, n) {
if ($.trim($("#trs" + i + " td:eq(0)").html()) != $.trim(n.SBBH)) {
$("#trs" + i + " td:eq(0)").html($.trim(n.SBBH));
}
if ($.trim($("#trs" + i + " td:eq(1)").html()) != $.trim(n.DLMC)) {
$("#trs" + i + " td:eq(1)").html($.trim(n.DLMC));
}
if ($.trim($("#trs" + i + " td:eq(2)").html()) != $.trim(n.HPHM)) {
$("#trs" + i + " td:eq(2)").html($.trim(n.HPHM));
}
if ($.trim($("#trs" + i + " td:eq(3)").html()) != $.trim(n.JGSJ)) {
$("#trs" + i + " td:eq(3)").html($.trim(n.JGSJ));
}

$ICount = i + 1;
}


</script>

</head>
<body>
<form id="form1" runat="server">
<input id="Button1" type="button" value="刷新" onclick="BindTable()" />
<div id="LoadTable">
</div>
</form>
</body>



后台:
private void GetData(HttpContext context)
{
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=123456;database=New_ITS");
conn.Open();
SqlCommand cmd = new SqlCommand("select top 20 * from carinfo", conn);
SqlDataReader dr = cmd.ExecuteReader();
IList<Entity> carinfo = new List<Entity>();
while (dr.Read())
{
Entity entity = new Entity();
entity.SBBH = dr["SBBH"].ToString();
entity.DLMC = dr["DLMC"].ToString();
entity.HPHM = dr["HPYS"].ToString();
entity.JGSJ = dr["JGSJ"].ToString();
carinfo.Add(entity);
}
dr.Close();
dr.Dispose();
conn.Close();
System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();
context.Response.Write(js.Serialize(carinfo));
context.Response.End();

}



死活都找不出上面的代码会在哪些存在内存泄漏, 可是每点击一次,进程IE的内存就是涨个50K-100K

还请各位想想办法,帮助一下。。。谢谢
...全文
1016 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Terry_yuan 2012-11-19
  • 打赏
  • 举报
回复
楼上的情况,现在也出现了。我们在用jquery做一个长轮询的服务,使用ajax不断请求。后来功能没有问题,性能测试时发现IE开久了页面经常卡死,内存只增不减。 每次jquery的Ajax请求都会创建一个xmlHttprequest对象,理论上讲,长连接的请 求是一个无限递归,请求数量是非常大的,但是由于每次请求都会建立一个新的xmlhttprequest,而且 jquery不会自动回收资源,所以导致了内存溢出。 通过查看jquery API,发现jquery还有一个 complete对象,是请求完成后回调函数 (请求成功或失败 之后均调用)。 同时有两个参数XMLHttpRequest, textStatus。所以,我们只需要在请求完成后,将传 回的XMLHttprequest对象手工回收即可,代码如下: $.ajax({ url: "http://www.jb51.net", data: { name: "xxxx" }, dataType: "xml", success: function (data, textStatus) { //do something... }, complete: function (XHR, TS) { XHR = null } }); 详细出处参考:http://www.jb51.net/article/30458.htm
kuibono 2012-04-11
  • 打赏
  • 举报
回复
这是因为每次ajax请求都会冲洗创建xmlHTTP对象,你请求100次,就100个对象在你内存里 ,1w次,就1w个对象在你内存里。不卡死才怪……
解决的办法就是不用jquery。自己写xmlHTTP请求。
qq442627268 2011-09-23
  • 打赏
  • 举报
回复
确实会卡死
happy184 2010-08-12
  • 打赏
  • 举报
回复
$TableStr 没有显示声明?有没有关系,我乱说的哈
yuxh81 2010-08-09
  • 打赏
  • 举报
回复
我用了一段时间的query ajax,并没有发现内存泄漏的问题啊

如果真有这问题,那就要小心啦!!
Abin-2008 2010-08-05
  • 打赏
  • 举报
回复
你这样会有内存溢出???
hoojo 2010-08-04
  • 打赏
  • 举报
回复

function BindTable() {
$.getJSON("json_Page.ashx?rid=" + Math.random(), ss);
}
这里的ss有没有死循环,bindTable有没有被事件嵌套执行
gg_show 2010-08-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gxingmin 的回复:]
长几十k正常
[/Quote]



不正常的, 因为我在做一个刷新的功能, 这样以来, 2G的内存 2个多小时就长满了。。导致系统卡死, 需重启、
gxingmin 2010-08-03
  • 打赏
  • 举报
回复
长几十k正常

52,798

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧