如下代码:
b.aspx
        for (int i = 0; i < ip.Length; i++)
        {
            DataRow dr = dt.NewRow();
            dr["ip"] = ip[i];
            dt.Rows.Add(dr);
        }
        topology_GridView.DataSource = dt;
        topology_GridView.DataBind();a.aspx
        var dataFresh=20;
        function showdiv()
        {
            dataFresh=dataFresh-1;
            if(dataFresh==0)
            {
                dataFresh=20;
                layer1.innerHTML="<iframe name='I1' src='b.aspx' marginwidth='0' marginheight='0' height='100%' width='100%' scrolling='no' border='0' frameborder='0' style='height: 102%' id='IFRAME1'></iframe>";
                layer1.style.top=td1.style.top;
                layer1.style.left=0;
                layer1.style.display="";
             }
        }
        setInterval(showdiv,1000);
以上代码是没问题的。b.aspx仲还有一些赋值的算法,但都可以忽略,因为我试过分别单独执行过,问题是出在这段代码中
现在的问题是,假设ip.Length<=1000,但为什么我datatable中连1000条数据都没有的情况下,居然会导致到进程池崩溃呢?我以前用这样的方法绑定超过10000条数据都没有问题,为什么这种情况下,绑定1000条都不行呢?C#没理由连1000条数据都处理不了啊,实在不解,请各位大虾帮忙,谢谢

解决方案 »

  1.   

    1 不知道lz是如何写的,一个是后台代码来源于.cs,除非你前后台混在一起写,后面一个是前台代码。
    2 c#是编程语言,而并不负责编译处理编程后的页面和后台代码。
    3 靠目前的代码实在不好看出问题在哪,应该是执行a页面时候出错吧?请问错误的详细信息是什么?
      

  2.   

    回楼上
    1:a.aspx是一个页面,b.aspx是a.aspx中用一个iframe连接的页面,b.aspx页面就只有gridview。两个页面是独立的。并没有混在一起写,b.aspx那段代码是写在b.aspx.cs中的。a.aspx每隔20秒就重新连接一次b.aspx,也就是说b.aspx的代码每20秒执行一次
    2:不太明白
    3:a页面没有错误,也不是值b页面有任何错误,只是我的错误是因为b页面所写的算法太复杂导致进程池崩溃。错误的表现信息是session过期,但实际上是进程池崩溃(IIS回收所有资源)。而我不明白也正是为什么b页面的这个算法会导致这个问题
      

  3.   

    回楼上 
    1:a.aspx是一个页面,b.aspx是a.aspx中用一个iframe连接的页面,b.aspx页面就只有gridview。两个页面是独立的。并没有混在一起写,b.aspx那段代码是写在b.aspx.cs中的。a.aspx每隔20秒就重新连接一次b.aspx,也就是说b.aspx的代码每20秒执行一次 
    2:不太明白 
    3:a页面没有错误,也不是值b页面有任何错误,只是我的错误是因为b页面所写的算法太复杂导致进程池崩溃。错误的表现信息是session过期,但实际上是进程池崩溃(IIS回收所有资源)。而我不明白也正是为什么b页面的这个算法会导致这个问题
    -----------------------1 你的问题描述信息是不正确的,副标题都是*.aspx,可是一个是来源与aspx文件一个不是。
    2 主要针对的是你“c#处理”的言论。你的说法根本就不对,C#哪管你后台代码执行啊
    3 lz还是没看懂,我看到你说的页面单独执行没问题,不过o说的是“a页面执行错误”,不等同于a页面错误,b页面错误!!!!!既然你知道b页面算法复杂,又咋说“b页面有些赋值算法,可以忽略了”?这不是前后矛盾?OK,抛开这些文字漏洞,既然你知道算法复杂,那么你就应该变动一下你的算法,增大超时时间http://bbs.valu.cn/dis-168732-1-1.html,另外考虑下异步显示或者不要一次加载全部数据。
      

  4.   

    算法是肯定要改的了,只是我很奇怪,为什么
            for (int i = 0; i < ip.Length; i++) 
            { 
                DataRow dr = dt.NewRow(); 
                dr["ip"] = ip[i]; 
                dt.Rows.Add(dr); 
            } 
            topology_GridView.DataSource = dt; 
            topology_GridView.DataBind(); 
    这个算法会导致进程池崩溃这么严重的问题。你就当b页面只有这么一个算法,前面的赋值都不过是datatable dt = new datatable之类,因为我试过单独执行这段代码都有问题,所以很奇怪,因为这种绑定gridview的方法可是很常用的啊,我意思就是问,这段东西的效率就真的那么低下吗?
      

  5.   

    请问你有没有在gridview的rowdatabound事件做些操作?确实很常用的做法,但是不能仅仅只看这一个地方,页面呈现前要执行很多事件,就看你在这些事件当中加了什么执行时间长的代码没(比如死循环或者多次创建对象等)
    又看到一个小问题
       for (int i = 0; i < ip.Length; i++) 
            { 
                DataRow dr = dt.NewRow(); 
                dr["ip"] = ip[i]; 
                dt.Rows.Add(dr); 
            } 
    -》建议改成
       DataRow dr;
       for (int i = 0; i < ip.Length; i++) 
            { 
                dr = dt.NewRow(); 
                dr["ip"] = ip[i]; 
                dt.Rows.Add(dr); 
            } 
      

  6.   

    gridview没有加到什么东西,所有事件都没有触发,就单单只是这一段东西
      

  7.   

    这些代码就放在page_load?
    这个页面后台代码就只有个page_load事件有你手写的代码么?
      

  8.   

    看看你的a页面到底是如何调用showdiv的了?
      

  9.   

    a.aspx 
            var dataFresh=20; 
            function showdiv() 
            { 
                dataFresh=dataFresh-1; 
                if(dataFresh==0) 
                { 
                    dataFresh=20; 
                    layer1.innerHTML=" <iframe name='I1' src='b.aspx' marginwidth='0' marginheight='0' height='100%' width='100%' scrolling='no' border='0' frameborder='0' style='height: 102%' id='IFRAME1'> </iframe>"; 
                    layer1.style.top=td1.style.top; 
                    layer1.style.left=0; 
                    layer1.style.display=""; 
                } 
            } 
            setInterval(showdiv,1000); 
    a页就是这样调用B页啊
      

  10.   

    trydatatable.AcceptChanges();before bind