<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        ASP.NET 高性能分頁代碼

        來源:懂視網 責編:小采 時間:2020-11-27 22:45:38
        文檔

        ASP.NET 高性能分頁代碼

        ASP.NET 高性能分頁代碼:最近給分頁快搞死,記得之前曾經發過修改DW ASP分頁的方法,后來又寫過手工打造的ASP分頁,現在進入.NET當然要配合存儲過程打造純手工高性能分頁了. 為什么會叫做高性能,為什么要手工打造,不使用.NET現有的分頁控件呢這個還要追溯到我修改DW ASP分頁的時
        推薦度:
        導讀ASP.NET 高性能分頁代碼:最近給分頁快搞死,記得之前曾經發過修改DW ASP分頁的方法,后來又寫過手工打造的ASP分頁,現在進入.NET當然要配合存儲過程打造純手工高性能分頁了. 為什么會叫做高性能,為什么要手工打造,不使用.NET現有的分頁控件呢這個還要追溯到我修改DW ASP分頁的時

        最近給分頁快搞死,記得之前曾經發過修改DW ASP分頁的方法,后來又寫過手工打造的ASP分頁,現在進入.NET當然要配合存儲過程打造純手工高性能分頁了.

        為什么會叫做高性能,為什么要手工打造,不使用.NET現有的分頁控件呢?這個還要追溯到我修改DW ASP分頁的時候,那個我還不怎么懂程序這個東西,只會修修補補,就更不要去談什么性能問題.當時改的很心煩,接著叫我的私人技術總監張總幫我看看,當時張總就以一種不屑一顧的眼神往著我,說了句話:值得嗎?

        接著到我手工打造ASP分頁,又搞不下去了,張總丟給我一堆.NET的代碼:自己研究吧.然后又丟了一句話:用.NET做吧,幾句話搞定,不用這個費神.

        后來我發現以前的分頁都是把整個數據集全部讀取后再做分頁處理的,一旦數據量過大,處理會十分緩慢,甚至服務器崩潰.然后就是以前的分頁不能象游標一樣滾動,總是固定在一組里面,不可能實現當前頁碼在中間的效果.

        接著就要說.NET的分頁控件了,確實幾句話可以搞定,不過缺陷就是我發現的第一個問題,屬于把數據全部讀出再處理的那種,沒有效率,所以終于開始動手,純手工打造ASP.NET高性能分頁.

        首先是存儲過程,只取出我需要的那段數據,如果頁數超過數據總數,自動返回最后一頁的紀錄:
        代碼如下:
        set ANSI_NULLS ON
        set QUOTED_IDENTIFIER ON
        GO
        -- =============================================
        -- Author: Clear
        -- Create date: 2007-01-30
        -- Description: 高性能分頁
        -- =============================================
        Alter PROCEDURE [dbo].[Tag_Page_Name_Select]
        -- 傳入最大顯示紀錄數和當前頁碼
            @MaxPageSize int,
            @PageNum int,
        -- 設置一個輸出參數返回總紀錄數供分頁列表使用
            @Count int output
        AS
        BEGIN
            SET NOCOUNT ON;

           DECLARE
        -- 定義排序名稱參數
                @Name nvarchar(50),
        -- 定義游標位置
                @Cursor int
        -- 首先得到紀錄總數
           Select @Count = count(tag_Name)
             FROM [viewdatabase0716].[dbo].[view_tag];
        -- 定義游標需要開始的位置
            Set @Cursor = @MaxPageSize*(@PageNum-1)+1
        -- 如果游標大于紀錄總數將游標放到最后一頁開始的位置
            IF @Cursor > @Count
            BEGIN
        -- 如果最后一頁與最大每次紀錄數相等,返回最后整頁
                IF @Count % @MaxPageSize = 0
                    Set @Cursor = @Count - @MaxPageSize + 1
        -- 否則返回最后一頁剩下的紀錄
                ELSE
                    Set @Cursor = @Count - (@Count % @MaxPageSize) + 1
            END
        -- 將指針指到該頁開始
            Set Rowcount @Cursor
        -- 得到紀錄開始的位置
            Select @Name = tag_Name
             FROM [viewdatabase0716].[dbo].[view_tag]
            orDER BY tag_Name;
        -- 設置開始位置
            Set Rowcount @MaxPageSize
        -- 得到該頁紀錄
                Select * 
                From [viewdatabase0716].[dbo].[view_tag]
                Where tag_Name >= @Name
                order By tag_Name

            Set Rowcount 0
        END

        然后是分頁控件(... 為省略的生成HTML代碼方法):
        代碼如下:
        using System.Data;
        using System.Configuration;
        using System.Web;
        using System.Web.Security;
        using System.Web.UI;
        using System.Web.UI.WebControls;
        using System.Web.UI.WebControls.WebParts;
        using System.Web.UI.HtmlControls;
        using System.Text;

        /// <summary>
        /// 擴展連接字符串
        /// </summary>
        public class ExStringBuilder
        {
            private StringBuilder InsertString;
            private StringBuilder PageString;
            private int PrivatePageNum = 1;
            private int PrivateMaxPageSize = 25;
            private int PrivateMaxPages = 10;
            private int PrivateCount;
            private int PrivateAllPage;
            public ExStringBuilder()
            {
                InsertString = new StringBuilder("");
            }
            /// <summary>
            /// 得到生成的HTML
            /// </summary>
            public string GetHtml
            {
                get
                {
                    return InsertString.ToString();
                }
            }
            /// <summary>
            /// 得到生成的分頁HTML
            /// </summary>
            public string GetPageHtml
            {
                get
                {
                    return PageString.ToString();
                }
            }
            /// <summary>
            /// 設置或獲取目前頁數
            /// </summary>
            public int PageNum
            {
                get
                {
                    return PrivatePageNum;
                }
                set
                {
                    if (value >= 1)
                    {
                        PrivatePageNum = value;
                    }
                }
            }
            /// <summary>
            /// 設置或獲取最大分頁數
            /// </summary>
            public int MaxPageSize
            {
                get
                {
                    return PrivateMaxPageSize;
                }
                set
                {
                    if (value >= 1)
                    {
                        PrivateMaxPageSize = value;
                    }
                }
            }
            /// <summary>
            /// 設置或獲取每次顯示最大頁數
            /// </summary>
            public int MaxPages
            {
                get
                {
                    return PrivateMaxPages;
                }
                set
                {
                    PrivateMaxPages = value;
                }
            }
            /// <summary>
            /// 設置或獲取數據總數
            /// </summary>
            public int DateCount
            {
                get
                {
                    return PrivateCount;
                }
                set
                {
                    PrivateCount = value;
                }
            }
            /// <summary>
            /// 獲取數據總頁數
            /// </summary>
            public int AllPage
            {
                get
                {
                    return PrivateAllPage;
                }
            }
            /// <summary>
            /// 初始化分頁
            /// </summary>
            public void Pagination()
            {
                PageString = new StringBuilder("");
        //得到總頁數
                PrivateAllPage = (int)Math.Ceiling((decimal)PrivateCount / (decimal)PrivateMaxPageSize);
        //防止上標或下標越界
                if (PrivatePageNum > PrivateAllPage)
                {
                    PrivatePageNum = PrivateAllPage;
                }
        //滾動游標分頁方式
                int LeftRange, RightRange, LeftStart, RightEnd;
                LeftRange = (PrivateMaxPages + 1) / 2-1;
                RightRange = (PrivateMaxPages + 1) / 2;
                if (PrivateMaxPages >= PrivateAllPage)
                {
                    LeftStart = 1;
                    RightEnd = PrivateAllPage;
                }
                else
                {
                    if (PrivatePageNum <= LeftRange)
                    {
                        LeftStart = 1;
                        RightEnd = LeftStart + PrivateMaxPages - 1;
                    }
                    else if (PrivateAllPage - PrivatePageNum < RightRange)
                    {
                        RightEnd = PrivateAllPage;
                        LeftStart = RightEnd - PrivateMaxPages + 1;
                    }
                    else
                    {
                        LeftStart = PrivatePageNum - LeftRange;
                        RightEnd = PrivatePageNum + RightRange;
                    }
                }

        //生成頁碼列表統計
                PageString.Append(...);

                StringBuilder PreviousString = new StringBuilder("");
        //如果在第一頁
                if (PrivatePageNum > 1)
                {
                    ...
                }
                else
                {
                    ...
                }
        //如果在第一組分頁
                if (PrivatePageNum > PrivateMaxPages)
                {
                    ...
                }
                else
                {
                    ...
                }
                PageString.Append(PreviousString);
        //生成中間頁
                for (int i = LeftStart; i <= RightEnd; i++)
                {
        //為當前頁時
                    if (i == PrivatePageNum)
                    {
                        ...
                    }
                    else
                    {
                        ...
                    }
                }
                StringBuilder LastString = new StringBuilder("");
        //如果在最后一頁
                if (PrivatePageNum < PrivateAllPage)
                {
                    ...
                }
                else
                {
                    ...
                }
        //如果在最后一組
                if ((PrivatePageNum + PrivateMaxPages) < PrivateAllPage)
                {
                    ...
                }
                else
                {
                    ...
                }
                PageString.Append(LastString);
            }
            /// <summary>
            /// 生成Tag分類表格
            /// </summary>
            public void TagTable(ExDataRow myExDataRow)
            {
                InsertString.Append(...);
            }


        調用方法:
        代碼如下:
        //得到分頁設置并放入Session
                ExRequest myExRequest = new ExRequest();
                myExRequest.PageSession("Tag_", new string[] { "page", "size" });
        //生成Tag分頁
                ExStringBuilder Tag = new ExStringBuilder();
                //設置每次顯示多少條紀錄
                Tag.MaxPageSize = Convert.ToInt32(Session["Tag_size"]);
                //設置最多顯示多少頁碼
                Tag.MaxPages = 9;
                //設置當前為第幾頁
                Tag.PageNum = Convert.ToInt32(Session["Tag_page"]);
                string[][] myNamenValue = new string[2][]{
                    new string[]{"MaxPageSize","PageNum","Count"},
                    new string[]{Tag.MaxPageSize.ToString(),Tag.PageNum.ToString()}
                };
        //調用存儲過程
                DataTable myDataTable = mySQL.BatchGetDB("Tag_Page_Name_Select", myNamenValue, "Count");
                Tag.DateCount = (int)mySQL.OutputCommand.Parameters["@Count"].Value;
                Tag.Pagination();

                HeadPage.InnerHtml = FootPage.InnerHtml = Tag.GetPageHtml;

                for (int i = 0, j = myDataTable.Rows.Count; i < j; i++)
                {
                    Tag.TagTable(new ExDataRow(myDataTable.Rows[i]));
                }
                TagBox.InnerHtml = Tag.GetHtml;


        處理頁碼到Session的方法就不提供了,沒有很大關.調用存儲過程返回參數和紀錄的方法和之前我寫的批量數據操作方法差不多的,只需要定義一個輸出方式.

        目前我想這些代碼還會有瑕疵,等項目后期代碼審查的時候再強化吧,我想說的一點就是不要被那些拖來拖去的東西迷惑了,那樣對自己永遠都沒有提高,要抱著知其然,知其所以然的態度去做一件事情,對自己的幫助才會明顯. 

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        ASP.NET 高性能分頁代碼

        ASP.NET 高性能分頁代碼:最近給分頁快搞死,記得之前曾經發過修改DW ASP分頁的方法,后來又寫過手工打造的ASP分頁,現在進入.NET當然要配合存儲過程打造純手工高性能分頁了. 為什么會叫做高性能,為什么要手工打造,不使用.NET現有的分頁控件呢這個還要追溯到我修改DW ASP分頁的時
        推薦度:
        標簽: 代碼 net 分頁
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 午夜亚洲www湿好大| 久久久久亚洲精品中文字幕| 亚洲视频免费一区| 99久久久国产精品免费牛牛| 久久精品国产亚洲AV嫖农村妇女| 国产又黄又爽又大的免费视频 | 亚洲精品高清久久| 精品一区二区三区免费毛片爱 | 亚洲精品无码久久久久| 免费看男人j放进女人j免费看| 亚洲gv白嫩小受在线观看| 久草免费福利资源站| 亚洲色图在线观看| 好男人www免费高清视频在线| 亚洲色一区二区三区四区| 国产一级大片免费看| 一级做a免费视频观看网站| 久久精品国产亚洲综合色| 日本在线看片免费人成视频1000| 亚洲成人免费电影| 国产精品冒白浆免费视频 | 九一在线完整视频免费观看| 国产亚洲精AA在线观看SEE| 99精品一区二区免费视频| 精品国产成人亚洲午夜福利| 亚洲?V乱码久久精品蜜桃| 亚洲精品免费视频| 亚洲熟妇AV一区二区三区浪潮| mm1313亚洲国产精品美女| 99精品视频在线观看免费专区| 亚洲中文字幕久久精品无码A| 亚洲AV网站在线观看| 国产免费拔擦拔擦8X高清在线人 | 亚洲精品天堂成人片AV在线播放| 亚洲成aⅴ人片久青草影院 | 成人性生交大片免费看午夜a| 免费人成又黄又爽的视频在线电影| 91亚洲视频在线观看| 色视频色露露永久免费观看| 人成电影网在线观看免费| 亚洲国产综合第一精品小说|