Heim Backend-Entwicklung C#.Net-Tutorial ASP.NET-Hochleistungs-Paging-Code

ASP.NET-Hochleistungs-Paging-Code

Jan 10, 2017 pm 01:57 PM

Ich hatte in letzter Zeit Probleme mit dem Paging. Ich erinnere mich, dass ich zuvor eine Methode zum Ändern des DW-ASP-Pagings veröffentlicht und später ein manuelles ASP-Paging geschrieben habe. Jetzt muss ich natürlich zusammenarbeiten Gespeicherte Prozeduren zum Erstellen rein manueller Hochleistungs-Paging. Warum muss es manuell erstellt werden, anstatt die vorhandenen Paging-Steuerelemente von .NET zu verwenden? Paging, und ich wusste damals nicht viel über Programmierung, ich wusste nur, wie man Dinge repariert, geschweige denn, wie man über Leistungsprobleme spricht, also fragte ich meinen persönlichen technischen Direktor, Herrn Zhang. Um mir zu helfen, einen Blick darauf zu werfen, sah mich Herr Zhang mit einem verächtlichen Blick an und sagte: „Lohnt es sich?“ Herr Zhang warf mir einen Haufen .NET-Code zu: Studieren Sie es selbst. Dann fügte er einen weiteren Satz hinzu: Benutzen Sie .NET, um es zu tun, Sie können es in nur wenigen Worten erledigen, kümmern Sie sich nicht darum.

Später stellte ich fest, dass der vorherige Paging-Prozess darin bestand, den gesamten Datensatz zu lesen, bevor die Paging-Verarbeitung durchgeführt wurde. Sobald die Datenmenge zu groß ist, wird die Verarbeitung sehr langsam sein oder sogar der Server abstürzen. Dann kann die vorherige Seite nicht wie ein Cursor gescrollt werden, sie ist immer in einer Gruppe fixiert und es ist unmöglich, den Effekt der aktuellen Seitenzahl in der Mitte zu erzielen.

Lassen Sie uns als nächstes über die Seite von NET sprechen Steuerung, es kann zwar in wenigen Worten gelöst werden, aber der Fehler ist das erste Problem, das ich gefunden habe, nämlich, dass es ineffizient ist, alle Daten zu lesen und dann zu verarbeiten, also habe ich schließlich damit begonnen, ASP.NET rein manuell zu erstellen . Hochleistungs-Paging. Die erste ist die gespeicherte Prozedur, die nur die von mir benötigten Daten herausnimmt. Wenn die Anzahl der Seiten die Gesamtzahl der Daten übersteigt, wird automatisch der Datensatz der letzten Seite zurückgegeben:


Dann ist die Paging-Steuerung (... die weggelassene Methode zum Generieren von HTML-Code):


Aufrufmethode:

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
Nach dem Login kopieren

Die Verarbeitungsmethode Es werden keine Seitenzahlen für die Sitzung bereitgestellt, und sie ist nicht sehr groß. Die Methode zum Aufrufen der gespeicherten Prozedur zur Rückgabe von Parametern und Datensätzen ähnelt der zuvor geschriebenen Batch-Datenoperationsmethode.

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(...); 
    }
Nach dem Login kopieren
Derzeit denke ich, dass es in diesen Codes Fehler geben wird. Ich werde auf den späteren Code des Projekts warten. Lassen Sie sich von diesen Dingen nicht verwirren Das wird Sie nie verbessern, wenn Sie wissen, was passiert und warum.

Weitere Artikel zum Thema ASP.NET High Performance Paging-Code, bitte achten Sie auf die chinesische PHP-Website!
//得到分页设置并放入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;
Nach dem Login kopieren
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1663
14
PHP-Tutorial
1264
29
C#-Tutorial
1237
24
C# .NET: Erforschen von Kernkonzepten und Programmierfundamentaldaten C# .NET: Erforschen von Kernkonzepten und Programmierfundamentaldaten Apr 10, 2025 am 09:32 AM

C# ist eine moderne, objektorientierte Programmiersprache, die von Microsoft und als Teil des .NET-Frameworks entwickelt wurde. 1.C# unterstützt die objektorientierte Programmierung (OOP), einschließlich Einkapselung, Vererbung und Polymorphismus. 2. Asynchrones Programmieren in C# wird über Async implementiert und wartet auf Schlüsselwörter, um die Reaktionsfähigkeit der Anwendungen zu verbessern. 3.. Verwenden Sie LINQ, um Datensammlungen präzise zu verarbeiten. 4. Häufige Fehler umfassen Null-Referenzausnahmen und Indexausnahmen außerhalb des Bereichs. Zu den Debugging -Fähigkeiten gehört die Verwendung eines Debuggers und Ausnahmeberechnung. 5. Leistungsoptimierung umfasst die Verwendung von StringBuilder und das Vermeiden von unnötigem Packung und Unboxing.

Testen von C# .NET-Anwendungen: Einheit, Integration und End-to-End-Test Testen von C# .NET-Anwendungen: Einheit, Integration und End-to-End-Test Apr 09, 2025 am 12:04 AM

Die Teststrategien für C#.NET-Anwendungen umfassen Unit-Tests, Integrationstests und End-to-End-Tests. 1. Unit -Test stellt sicher, dass die Mindesteinheit des Codes unter Verwendung des Frameworks MStest, Nunit oder Xunit unabhängig funktioniert. 2. Integrierte Tests überprüfen die Funktionen mehrerer Einheiten kombinierter, häufig verwendeten simulierten Daten und externen Diensten. 3. End-to-End-Tests simuliert den vollständigen Betriebsprozess des Benutzers, und Selen wird normalerweise für automatisierte Tests verwendet.

Die anhaltende Relevanz von C# .NET: Ein Blick auf die aktuelle Verwendung Die anhaltende Relevanz von C# .NET: Ein Blick auf die aktuelle Verwendung Apr 16, 2025 am 12:07 AM

C#.NET ist immer noch wichtig, da es leistungsstarke Tools und Bibliotheken bietet, die mehrere Anwendungsentwicklung unterstützen. 1) C# kombiniert .NET Framework, um die Entwicklung effizient und bequem zu machen. 2) Mechanismus zum Typensicherheit und Müllsammlung von C#erhöht die Vorteile. 3) .NET bietet eine plattformübergreifende laufende Umgebung und eine reichhaltige APIs, wodurch die Flexibilität der Entwicklung verbessert wird.

Vom Web zum Desktop: Die Vielseitigkeit von C# .NET Vom Web zum Desktop: Die Vielseitigkeit von C# .NET Apr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

Advanced C# .NET Tutorial: Ace Ihr nächstes Senior Developer Interview Advanced C# .NET Tutorial: Ace Ihr nächstes Senior Developer Interview Apr 08, 2025 am 12:06 AM

Das Interview mit C# Senior Developer erfordert das Mastering von Kernwissen wie asynchrones Programmieren, LINQ und interne Arbeitsprinzipien von .NET -Frameworks. 1. Asynchrones Programmieren vereinfacht die Operationen durch Async und wartet auf die Verbesserung der Anwendungsreaktionsfähigkeit. 2.LinQ betreibt Daten im SQL -Stil und achtet auf die Leistung. 3. Die CLR des Net -Frameworks verwaltet den Speicher, und die Müllsammlung muss mit Vorsicht verwendet werden.

Ist C# .NET das Richtige für Sie? Bewertung seiner Anwendbarkeit Ist C# .NET das Richtige für Sie? Bewertung seiner Anwendbarkeit Apr 13, 2025 am 12:03 AM

C#.NetissoBableFoREenterPrise-Level Applications-WithemicrosoftCosystemDuetoitsStrongtyPing, Richlibrary, Androbustperformance.

C# als vielseitige .NET -Sprache: Anwendungen und Beispiele C# als vielseitige .NET -Sprache: Anwendungen und Beispiele Apr 26, 2025 am 12:26 AM

C# wird häufig in Anwendungen auf Unternehmensebene, Spieleentwicklung, mobilen Anwendungen und Webentwicklung verwendet. 1) In Anwendungen auf Unternehmensebene wird C# häufig für ASP.NetCore zur Entwicklung von WebAPI verwendet. 2) In der Spielentwicklung wird C# mit der Unity Engine kombiniert, um die Rollenkontrolle und andere Funktionen zu realisieren. 3) C# unterstützt Polymorphismus und asynchrone Programmierung, um die Code -Flexibilität und die Anwendungsleistung zu verbessern.

C# Code in .NET: Erforschen des Programmiervorgangs C# Code in .NET: Erforschen des Programmiervorgangs Apr 12, 2025 am 12:02 AM

Der Programmierungsprozess von C# in .NET enthält die folgenden Schritte: 1) Schreiben von C# Code, 2) Kompilieren in eine mittlere Sprache (IL) und 3), die durch die .NET -Laufzeit (CLR) ausführt. Die Vorteile von C# in .NET sind die moderne Syntax, das leistungsstarke Typsystem und die enge Integration in das .NET -Framework, das für verschiedene Entwicklungsszenarien geeignet ist, von Desktop -Anwendungen bis hin zu Webdiensten.

See all articles