首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-12-26 
jQuery的Ajax请求,导致浏览器内存泄漏,不断狂涨最近为了jQuery的事搞的自己对jQuery失去了信心前台:head

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版本关系不大。。。

上个项目就是JQUERY+AJAX+CSS做地。。。

也没出现过这种情况
[解决办法]
引用:
这个真得自己看。。

和JQUERY版本关系不大。。。

上个项目就是JQUERY+AJAX+CSS做地。。。

也没出现过这种情况



你有试过不停的点么? 主要是占用的内存不会回收。导致内存不断上升
[解决办法]
可能是得要清理一下缓存吧!
[解决办法]
var $index = 20;
  //返回的行数
  var $ICount = 0;
????
[解决办法]
引用:
可能是得要清理一下缓存吧!


难道说要手动么?


[解决办法]
引用:
var $index = 20;
  //返回的行数
  var $ICount = 0;
????


有问题么? 这个是全局的变量、、、
[解决办法]
   那么多代码啊?能简洁点不?
[解决办法]
不会占这么多吧?你调试下js代码吧
[解决办法]
不要用jquery去做一些很复杂的工作,因为它本质是javascript,本身没有垃圾回收机制,你在页面上调用foreach并且不断的给临时变量会导致内存泄漏。 复杂的工作应该尽量放到server端用c#去做。client端尽量保持简洁。
[解决办法]
cache:false
[解决办法]
用完了要
var c="xxx";
delete c;
[解决办法]
使用setTimeOut()

热点排行