亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ASP.NET 高性能分頁代碼

2024-07-10 13:14:15
字體:
來源:轉載
供稿:網友
最近給分頁快搞死,記得之前曾經發過修改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的方法就不提供了,沒有很大關.調用存儲過程返回參數和紀錄的方法和之前我寫的批量數據操作方法差不多的,只需要定義一個輸出方式. 

目前我想這些代碼還會有瑕疵,等項目后期代碼審查的時候再強化吧,我想說的一點就是不要被那些拖來拖去的東西迷惑了,那樣對自己永遠都沒有提高,要抱著知其然,知其所以然的態度去做一件事情,對自己的幫助才會明顯.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区三区国产在线观看| 亚洲女成人图区| 日韩欧美在线观看| 国产精品白丝jk喷水视频一区| 欧美成人精品在线视频| 日韩电影中文字幕在线观看| 成人自拍性视频| 26uuu亚洲国产精品| 国产日本欧美一区二区三区在线| 国模精品系列视频| 久久国产精品久久久久久久久久| 欧美日韩第一页| 日韩欧美有码在线| 亚洲精品在线不卡| 国产午夜精品视频免费不卡69堂| 亚洲精品按摩视频| 成人有码视频在线播放| 久久精品视频网站| 欧美激情精品久久久久久免费印度| 欧美日韩国产成人高清视频| 国产日韩在线播放| 欧美日韩国产二区| 国产手机视频精品| 日韩精品在线观看视频| 日韩经典中文字幕| 色综合91久久精品中文字幕| 欧美日韩国产精品一区二区不卡中文| 亚洲精品二三区| 91精品久久久久久综合乱菊| 日韩av手机在线| 欧美丝袜美女中出在线| 97免费视频在线| 日韩av网址在线| 国产精品伦子伦免费视频| 亚洲午夜性刺激影院| 综合国产在线观看| 在线观看日韩专区| 国产精品va在线| 7m精品福利视频导航| 久久久久久久久久久国产| 97国产在线观看| 国产精品亚洲美女av网站| 日韩欧美国产网站| 日本午夜在线亚洲.国产| 欧美精品国产精品日韩精品| 不卡毛片在线看| 一本色道久久综合亚洲精品小说| 国产香蕉一区二区三区在线视频| 成人春色激情网| 福利微拍一区二区| 国产精品国产三级国产aⅴ9色| 97精品伊人久久久大香线蕉| 欧美精品在线免费观看| 欧美中文在线观看| 最近免费中文字幕视频2019| 日韩视频在线免费观看| 亚洲精品自拍视频| 亚洲午夜色婷婷在线| 伊人精品在线观看| 97不卡在线视频| 日韩极品精品视频免费观看| 亚洲一区二区福利| 国产视频精品va久久久久久| 中文字幕日韩专区| 精品视频在线播放| 永久免费看mv网站入口亚洲| 欧美视频中文在线看| www高清在线视频日韩欧美| 国产日韩在线播放| 日韩免费在线电影| 爱福利视频一区| 亚洲成人精品视频| 精品人伦一区二区三区蜜桃免费| 欧美性xxxx极品hd欧美风情| 97视频在线观看网址| 日韩高清不卡av| 97超级碰在线看视频免费在线看| 亚洲成人在线网| 91香蕉亚洲精品| 欧美性69xxxx肥| 欧美精品在线网站| 92福利视频午夜1000合集在线观看| 欧美日韩美女视频| 日韩av快播网址| 成人淫片在线看| 亚洲精品乱码久久久久久按摩观| 欧洲亚洲免费在线| 97在线视频免费观看| 欧美老妇交乱视频| 精品久久久国产| 久久伊人精品视频| 日韩三级影视基地| 欧美中文在线观看国产| 国外视频精品毛片| 欧美亚洲一区在线| 欧美亚洲视频在线看网址| 欧美日韩成人在线观看| 欧美精品video| 欧美成人激情视频| 中文字幕国内精品| 国产精品一区二区久久久久| 亚洲国产成人精品久久久国产成人一区| 精品亚洲一区二区三区在线播放| 精品成人av一区| 亚洲欧美www| 国产精品国产三级国产aⅴ9色| 亚洲理论片在线观看| 亚洲精品视频二区| 精品视频久久久久久久| 色老头一区二区三区在线观看| 2019国产精品自在线拍国产不卡| 亚洲人免费视频| 亚洲精品视频播放| 久久亚洲精品国产亚洲老地址| 久久精品国产欧美亚洲人人爽| 亚洲国产成人精品久久| 在线视频欧美日韩精品| 亚洲精品乱码久久久久久按摩观| 亚洲视频欧美视频| 国产一区二区三区日韩欧美| 亚洲视频axxx| 国自产精品手机在线观看视频| 亚洲图片制服诱惑| 国产精品久久久av| 亚洲片国产一区一级在线观看| 日本精品视频在线观看| 懂色av一区二区三区| 日韩电影中文字幕av| 欧美日韩免费网站| 久久精品在线播放| 国产精品久久久久久久久免费看| 国产一区二区三区久久精品| 欧美一级片免费在线| 黑人极品videos精品欧美裸| 久久久久这里只有精品| 欧美日韩高清在线观看| 欧美日韩视频在线| 一本一本久久a久久精品牛牛影视| 精品国产拍在线观看| 中文字幕精品www乱入免费视频| 国产午夜精品全部视频播放| 一区二区国产精品视频| 午夜精品免费视频| 狠狠干狠狠久久| 亚洲高清久久网| 久久久久久久爱| 欧美日韩ab片| 影音先锋欧美精品| 国色天香2019中文字幕在线观看| 91国自产精品中文字幕亚洲| 欧美激情综合亚洲一二区| 久久久影视精品| 亚洲精品一区av在线播放| 日韩国产高清污视频在线观看| 狠狠躁18三区二区一区| 亚洲精品v欧美精品v日韩精品| 孩xxxx性bbbb欧美| 亚洲伊人成综合成人网| 在线播放日韩精品| 91热福利电影| 国产精品精品国产| 一区二区三区视频免费| 欧美激情亚洲自拍| 欧美激情精品久久久久|