WEB服务器是WINDOWS2003 server,数据库服务器在另一台计算机上,数据库是Oracle10g,我在一个页面中把表T_FAULT(有100列)的所有数据都查询出来,大概有16000行;
我在某个页面中用如下的语法绑定GridView,此GridView每页显示30行,显示页面非常慢,IE中的进度条一点一点的往前走,从而导致其它客户操作其它内容也非常慢,跟系统没有反映差不多,非常影响用户的正常工作,用户抱怨连天,只能在WEB服务器上把"ASP.NET 状态服务"和"World Wide Web Publishing Service"重新启动才能操作其它内容,如果再进入此功能,故障重现,
目前我只能告诉用户目前不要使用此功能,正在寻找解决方法.OracleConnection mainConn = new OracleConnection()
mainConn.ConnectionString="Data Source=source1;Integrated Security=false;Password=sa;User ID=sdk5;Max Pool Size=100;Min Pool Size=5;Pooling=True;"                  
mainConn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = mainConn;
cmd.Parameters.Clear();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "select * from T_FAULT order by SDATE";
OracleDataAdapter da = new OracleDataAdapter()
da.SelectCommand = cmd;
DataTable dt;
da.Fill(datatable);
if(dt!=null)
{
    GridView1.DataSource = dt;
    GridView1.DataBind();
    GridView1.SelectedIndex = -1;
}
mainConn.Close();

解决方案 »

  1.   

    可以使用rownum()的扩展函数加表变量的方法也可以,
      

  2.   

    发一个oracle存储过成实现分页  procedure sp_Page(p_PageSize int,          --每页记录数
                      p_PageNo int,            --当前页码,从 1 开始
                      p_SqlSelect varchar2,    --查询语句,含排序部分
                      p_SqlCount varchar2,     --获取记录总数的查询语句
                      p_OutRecordCount out int,--返回总记录数
                      p_OutCursor out ResultData)
      as
          v_sql varchar2(3000);
          v_count int;
          v_heiRownum int;
          v_lowRownum int;
      begin
        ----取记录总数
        execute immediate p_SqlCount into v_count;
        p_OutRecordCount := v_count;
        ----执行分页查询
        v_heiRownum := p_PageNo * p_PageSize;
        v_lowRownum := v_heiRownum - p_PageSize +1;    v_sql := 'SELECT *
                  FROM (
                        SELECT A.*, rownum rn
                        FROM  ('|| p_SqlSelect ||') A
                        WHERE rownum <= '|| to_char(v_heiRownum) || '
                       ) B
                  WHERE rn >= ' || to_char(v_lowRownum) ;
                  --注意对rownum别名的使用,第一次直接用rownum,第二次一定要用别名rn    OPEN p_OutCursor FOR  v_sql;  end sp_Page;
      

  3.   

    T_FAULT 表里有多少数据啊?
      

  4.   

    select * from T_FAULT order by SDATE1 是否需要显示所有的数据,如果有写特别大的字段,不需要显示,那么就不要图方便,写成 select * ,写成select 字段1 , 字段2 这样的方式去做。2 如果是1600条数据,那么不算特别多,估计时间是花费在了取数据上面,建议在 SDATE 这个字段上增加索引。
      

  5.   

    分页会比较好,很多数据查询出来就会输出HTML代码,越多数据输出越多代码,肯定慢。我前几天也碰到过这样的问题。我是用AspNetPager控件给它分页,速度果然快很多,再看一下代码,没有之前全部查询出来那么多HTML代码了
      

  6.   

    在数据库中用存储过程进行分页,显示多少获取多少,这样占用的带宽小,显示速度快,如果再采用AJAX,用户体验应该会更好。
      

  7.   

    晕,数据量也不少了,写个存储过程把。别什么都SELECT *
      

  8.   

    通过Gridview控件带的分页不行吗?