如果调用存储过程中关联的表多,数据量非常大,以至于网页打开太慢,要怎么处理啊?显示是用Gridview显示

解决方案 »

  1.   

    做个真分页呗 限制一页就显示部分数据可以不?
    或者优化SQL语句 给数据库字段添加索引?
      

  2.   

    你肯定实在Load事件中去填充数据。。
      

  3.   

    没分页就分页显示
    如果还慢 你可以优化下你的代码
    还慢就看你的SQL语句能不能优化
    还慢你就自杀把!!!
      

  4.   

    分页了,在load事件中定义的方法进行绑定的,要怎么处理啊
      

  5.   


    将分页后的数据源返回给gridview就行了啊前台弄个分页控件,来构造URL传递给DAL到存储过程
      

  6.   

    思路是   在load事件中绑定数据只绑定一页的数据  比如select top 10然后他要看更多的时候再去查。这样页面的加载速度比较快。
      

  7.   

    考虑几个方面
    1, 建立要检索字段的索引,优化SQL,使用临时表等
    2,页面缓存
        <%@ OutputCache  Duration="40"  VaryByParam="*" %>
      或者其它缓存等
    3, 分页查询。
    4,禁用ViewState   
    5,业务逻辑调整,非要使用有效参数方可查询。
       
      

  8.   

    利用分页存储过程,将你多个表的参数传递过去http://www.cnblogs.com/lli0077/archive/2008/09/03/1282862.html
      

  9.   

    考虑几方面
     1,建立检索字段的索引,优化sql
     2,使用缓存 页面缓存
                 <%@ OutputCache  Duration="40"  VaryByParam="*" %>
         其它缓存等
     3,禁用viewstate
     4,分页查询 5, 调整业务逻辑,非要输入有效参数方可查询
      

  10.   

    先在查询分析器中测试sql语句执行的时间,否则优化sql语句
    可以采用分页,只返回一页数据如果执行时间并不太长,禁用gridview的viewstate
    否则数据经过base64加密后存于客户端并在数据交互中传输,极大影响效率分页的话你还需要自己处理下页码的显示
      

  11.   

    首先,分页读取数据,用分页存储过程如果还慢,那就是分页查询有性能问题,在查询分析器里面可以尝试看看它的响应时间,这需要在sql方面做一些性能调优,调优相关blog
      

  12.   


    首先很重要地,假设你在页面上放一个Button进行回发测试,这个按钮根本不影响页面其它任何控件,因此这个按钮被随时按下而回发时,你应该测试出页面上任何控件、任何状态都没有混乱或者甚至丢失,同时当然也不应该去读取数据库进行查询。如果有任何一种bug,你就应该重现考虑自己到底是否学会了asp.net编程,要从头学习asp.net。完成了这个基本的测试,才能考虑一些常见的优化做法。比如说重复的访问,不论是同一用户还是不同用户的访问,很多都应该是访问页面缓存(仅仅拿出asp.net缓存的html直接输出),而不是重新创建Page对象。然后,有很多查询结果其实是应该从数据缓存中直接拿出结果的,比如说查询“2010年度十大杰出青年的详细资料”,这个查询结果就可以直接从数据缓存中取出,而不是每一次都去从“各年度十大杰出青年列表,所有青年的详细资料”两个表中去计算结果。然后当然是修改你的页面逻辑,那些不需要seo的html内容,可以使用ajax异步加载,而不是第一次生成html时去计算。最后就是对于html上的图片、其它文件等等(尽管这些也可能异步加载),尽可能放到html的最后用javascript加载,而不是在主要的table或者div内部解析和加载。
      

  13.   

    其中初学者最容易产生的bug,就是在这个button测试时你会发现竟然要去读取数据库来重新创建整个内容。读取数据库这显然是错误的。这种错误地在回发页面一开始就重新读取后台数据并且建一遍页面,不但是多余(因为随后当你处理客户端提交时还要根据新的值来刷新内容从而重新创建)的,实际上也有逻辑bug,此时的控件树根本不应该用后台数据重建而是应该自动恢复上一次输出html时的那个控件树,读取数据库来创建控件树其实是产生不一致的控件树的(从而你的程序变得诡异)。
      

  14.   

    哦当然分页也是一个实在太基本的常识,你只要一听说这个名词就应该理解为什么要分页(没有人会一下在看1000条数据),而且任何入门书上都应该告诉过你如何分页。只不过对于大数据量的分页,应该采取高效的方法,仅仅写出向数据库查询一页数据的sql命令,而不是查询全部数据在内存里分页。
      

  15.   

    不要使用GridView的自带分页,他会把所有的纪录全部取出来然后再筛选
    找个分页存储过程,每次只返回一页数据再绑定
      

  16.   

    说说我的做法吧,我是一页显示多少,就查询多少数据(比如我一页展示10条数据,我就查询10条。),点击下一页的时候,利用Ajax技术,动态的又查询下一页的类容,然后展示,也就是说,你只要查询那一页的数据量。其他没必要查询。
      

  17.   

    既然用的是存储过程,那意味着所有的业务逻辑也在存储过程里面。这个问题应该发到MSSQL区去,叫那的大侠帮你优化存储过程、索引等等。
      

  18.   

    一、优化你的sql,减少嵌套查询。
    二、选择存储过程分页,返回当前页数据
    三、ajax查询
    四、不选择控件,选择用表单呈现数据。
      

  19.   

    repeater 是个不错的选择 它和纯table  div 效率相差不太大
      

  20.   

     private void Band_DataReader()
        {
            IList<Province> province = new List<Province>();        SqlConnection conn = new SqlConnection();
            conn.ConnectionString = "";
            conn.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.CommandText = "select * FROM province";
            cmd.CommandType = CommandType.Text;
            cmd.Connection = conn;        SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            
            while (dr.Read())
            {
                Province p = new Province(dr[1].ToString(), dr[2].ToString());
                province.Add(p);
            }
            dr.Close();
            conn.Close();        GridView1.DataSource = province;
            GridView1.DataBind();
        }用sqldatareader吧,因为它只是读取不需要缓存所有比较快捷,实用于大数据量读取的操作
      

  21.   

    优化你的sql, 返回当前页数据
      

  22.   

    也可以用Repeat...灵活,分页用起来也舒服