zoukankan      html  css  js  c++  java
  • 我的分页用户控件(性能问题)

    看过了很多大大的分页控件,用了AspNetPager感觉还不错,不过必须点一次分页按钮都要重新读一次数据库,我想了想到底能不能不要每次都读数据库呢?而且能够根据服务器的带宽和数据库的承载能力,而动态的调节?
    我初步做了下,自我感觉也不是很差,当然这只是我的感觉而已。
    主要功能:实现对Repeater,DataList,DataGrid,GridView的分页功能。

    我认为的优点:
    1:不要自己再构造复杂的分页存储过程;
    2:把预加载页数(不是全部的页数,这个可以自己定义)的数据保存在ViewState里面,分页时,如果数据在预加载的页数范围内,那么就不要再从数据库里面读,而是直接从ViewState里面取,这样就能适当的减少数据库的负担;
    3:自我感觉,至少要比系统GridView,DataGrid的分页效率要高。


    自我认为适应的场合:数据量不是很大的网站,尤其是个人网站,我认为够用了。

    实现的原理主要是:设定预加载数据的页数(这个是关键,如果带宽够可以设大一点,当然也不能太大了),每页的记录数...其他一些属性就省略了
    举个例子吧:
    如果设定预加载的页数为3,那么如果查询的数据超过3页的话,当你分页的时候,只要是在3页内的数据,都不会再去读数据库,而是从Viewstate里面读。

    性能考虑:我把数据保存在Viewstate里面合理吗?这样的分页控件能投入使用吗?
    希望大家能提些建议,如果这个可以的话,我将把改进后的控件发布出来。

    还是先发出来,和大家一起探讨一下吧:
    下面是对DataList的一个分页例子:

    DataList的具体操作如下:
    string constr="server=.;database=NorthWind;uid=test;pwd=123456";
        protected void Page_Load(object sender, EventArgs e)
        {
            this.CustomPager1.refresh += new WebUserControl_CustomPager.MyDeletegate(FillData);//这句不能少,很重要,在数据需要重
    新绑定时发生

            if (!IsPostBack)
            {
                FillData();
            }
        }

        private void FillData()
        {
            DataSet ds = new DataSet();
            ds = SqlHelper.ExecuteDataset(constr, "getAllOrders");
            CustomPager1.ActivePageCount = 3;//很重要,设定预加载数据的页数,根据带宽和内存设置
            CustomPager1.DataSourceType = "DataList";//指定数据控件的类型
            CustomPager1.DataSourceName = "DataList1";//数据控件的名称
            CustomPager1.DataSource = ds.Tables[0];
            CustomPager1.PageItems = ds.Tables[0].Rows.Count;//得到所有记录的条数
            CustomPager1.InitPagerData();//执行绑定过程
        }
    下面是这个用户控件的下载
    /Files/xiaozhou/CustomPager.rar

  • 相关阅读:
    tcp的三次握手和四次挥手
    前端文档规范
    阻止事件冒泡
    研发纠纷解决方案
    ui-router 中views的配置
    JXL操作Excel部分详解(java)
    utf-8与utf-16的区别
    把字符串转换为Double 类型
    spring MVC
    Android项目目录结构
  • 原文地址:https://www.cnblogs.com/xiaozhou/p/935968.html
Copyright © 2011-2022 走看看