ASP.NET 고성능 페이지 나누기 코드

10870 단어
최근에 페이지가 죽어가고 있습니다. 예전에 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;

/// 
/// 
/// 

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("");
    }
    /// 
    ///  HTML
    /// 

    public string GetHtml
    {
        get
        {
            return InsertString.ToString();
        }
    }
    /// 
    ///  HTML
    /// 

    public string GetPageHtml
    {
        get
        {
            return PageString.ToString();
        }
    }
    /// 
    /// 
    /// 

    public int PageNum
    {
        get
        {
            return PrivatePageNum;
        }
        set
        {
            if (value >= 1)
            {
                PrivatePageNum = value;
            }
        }
    }
    /// 
    /// 
    /// 

    public int MaxPageSize
    {
        get
        {
            return PrivateMaxPageSize;
        }
        set
        {
            if (value >= 1)
            {
                PrivateMaxPageSize = value;
            }
        }
    }
    /// 
    /// 
    /// 

    public int MaxPages
    {
        get
        {
            return PrivateMaxPages;
        }
        set
        {
            PrivateMaxPages = value;
        }
    }
    /// 
    /// 
    /// 

    public int DateCount
    {
        get
        {
            return PrivateCount;
        }
        set
        {
            PrivateCount = value;
        }
    }
    /// 
    /// 
    /// 

    public int AllPage
    {
        get
        {
            return PrivateAllPage;
        }
    }
    /// 
    /// 
    /// 

    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             {
                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         {
            ...
        }
        else
        {
            ...
        }
//
        if ((PrivatePageNum + PrivateMaxPages)         {
            ...
        }
        else
        {
            ...
        }
        PageString.Append(LastString);
    }
    /// 
    ///  Tag
    /// 

    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         {
            Tag.TagTable(new ExDataRow(myDataTable.Rows[i]));
        }
        TagBox.InnerHtml = Tag.GetHtml;


페이지 번호를Session으로 처리하는 방법은 제공하지 않습니다. 큰 관련이 없습니다.저장 프로세스에서 매개 변수와 기록을 되돌려 주는 방법은 이전에 내가 쓴 대량 데이터 조작 방법과 차이가 많지 않기 때문에 출력 방식을 정의하기만 하면 된다.
현재 나는 이러한 코드에 흠이 있을 것이라고 생각한다. 프로젝트 후기 코드 심사를 할 때 다시 강화해라. 내가 하고 싶은 말은 끌고 다니는 것들에 현혹되지 않도록 하는 것이다. 그러면 자신에게 영원히 향상되지 않을 것이다. 그 까닭을 알고 그 까닭을 아는 태도로 한 가지 일을 해야 자신에 대한 도움이 뚜렷하다.

좋은 웹페이지 즐겨찾기