jQuery的Ajax请求,导致浏览器内存泄漏,不断狂涨
最近为了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
还请各位想想办法,帮助一下。。。谢谢
[解决办法]
jQuery 版本老吗?
[解决办法]
你好~ 我的jQuery是最新的, 开始我也怀疑。。不过我试了全部的版本还是不行,,,
[解决办法]
这个真得自己看。。
和JQUERY版本关系不大。。。
上个项目就是JQUERY+AJAX+CSS做地。。。
也没出现过这种情况
[解决办法]
你有试过不停的点么? 主要是占用的内存不会回收。导致内存不断上升
[解决办法]
可能是得要清理一下缓存吧!
[解决办法]
var $index = 20;
//返回的行数
var $ICount = 0;
????
[解决办法]
难道说要手动么?
[解决办法]
有问题么? 这个是全局的变量、、、
[解决办法]
那么多代码啊?能简洁点不?
[解决办法]
不会占这么多吧?你调试下js代码吧
[解决办法]
不要用jquery去做一些很复杂的工作,因为它本质是javascript,本身没有垃圾回收机制,你在页面上调用foreach并且不断的给临时变量会导致内存泄漏。 复杂的工作应该尽量放到server端用c#去做。client端尽量保持简洁。
[解决办法]
cache:false
[解决办法]
用完了要
var c="xxx";
delete c;
[解决办法]
使用setTimeOut()