2009-02-25 12 views
4

Ich habe eine ASP.NET-Anwendung, die ziemlich einfach ist. Es fragt einige Daten ab und zeigt die Daten in einer GridView an (0 - 2000 Datensätze möglich). Ich habe versucht, einige Wege zu finden, um es zipper, Best Practices, etc. zu machen, da es etwas träge zu sein scheint, während das GridView gerendert wird. Ich habe einige Threads zur Verwendung von CSS gesehen, anstatt alle Stile direkt in der GridView zu setzen, aber ich bin mir nicht sicher, wie das aussehen würde.Was sind einige ASP.NET GridView-Möglichkeiten zur Leistungsverbesserung?

Dies ist, was das Gridview wie jetzt ...

<asp:GridView ID="gvResults" runat="server" DataKeyNames="ORDNO" AutoGenerateColumns="False" 
    CellPadding="4" ForeColor="#333333" OnSelectedIndexChanged="gvResults_SelectedIndexChanged" 
    Width="100%" OnRowDataBound="gvResults_RowDataBound" meta:resourcekey="gvResultsResource1"> 
    <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
    <Columns> 
     <asp:BoundField DataField="CSTNO" HeaderText="CUST" meta:resourcekey="BoundFieldResource1" /> 
     <asp:BoundField DataField="ORDNO" HeaderText="RMA NUMBER" meta:resourcekey="BoundFieldResource2" /> 
     <asp:BoundField DataField="CSTORD" HeaderText="CUST PO NUMBER" meta:resourcekey="BoundFieldResource3" /> 
     <asp:BoundField DataField="ORDDTE" HeaderText="ORDER DATE" meta:resourcekey="BoundFieldResource4" /> 
     <asp:BoundField DataField="INVDTE" HeaderText="INVOICE DATE" HtmlEncode="False" meta:resourcekey="BoundFieldResource5" /> 
     <asp:CommandField ShowSelectButton="true" ButtonType="Link" meta:resourcekey="CommandFieldResource1" /> 
    </Columns> 
    <EditRowStyle BackColor="#999999" /> 
    <EmptyDataTemplate> 
     <span style="color: Red;"> 
      <asp:Literal ID="litErrorNoRMAFound" runat="server" EnableViewState="False" meta:resourcekey="litErrorNoRMATagsFoundResource1" 
       OnInit="litErrorNoRMAFound_Init"></asp:Literal> 
     </span> 
    </EmptyDataTemplate> 
    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
    <HeaderStyle BackColor="#3494CC" Font-Bold="True" ForeColor="White" HorizontalAlign="Left" /> 
    <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> 
    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> 
    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> 
</asp:GridView> 

Vielen Dank im Voraus für alle Ihre Ideen/Kommentare sieht.

BEARBEITEN
Die Anforderungen erlauben kein Paging der Daten. Ich bin auch der Suche nach spezifischen Informationen über CSS Nutzung und Gridview ...

+0

Die Anforderung, 2000 Datensätze auf einer Seite anzuzeigen, ist dumm, weil es einen virtuellen Heuhaufen erstellt, um Nadeln zu finden. = P Ich bin mir sicher, dass du das merkst, aber es macht mich besser, mich über dumme Anforderungen lustig zu machen. – Greg

+0

@Greg: Ich persönlich würde zustimmen, das ist eine schreckliche Menge von Daten und würde leicht identifizierbare Informationen fehlen. Aber Benutzer haben bestimmte Bedürfnisse manchmal ... – RSolberg

+1

Benutzer, können nicht mit ihnen leben, kann nicht ohne sie leben. – Greg

Antwort

10

Verwenden Sie nicht die GridView. Wenn Sie Kontrolle wünschen, verwenden Sie den Repeater.

2

aktivieren Paging funktioniert;)

+0

Anforderungen für die Anwendung nicht zulassen ... Ich habe versucht ... – RSolberg

2

Ist Ansichtszustand aktiviert? Das könnte eine Menge versteckter Daten sein.

0

Sie haben es selbst beantwortet - zippen Sie es, um es zippier zu machen. Verwenden Sie einen HTTP-Komprimierungshandler.

11

Einige Ideen:

  • Ansichtszustand, wenn möglich beseitigen. Wenn Sie IIS6 oder höher verwenden, sollten Sie die Aktivierung von compression in Betracht ziehen.
  • Aktivieren Sie Paging auf Ihrem GridView, um die Anforderungszeiten niedrig zu halten.
  • Ihre implementierten Produktions Lösung Stellen Sie sicher, ist ohne Schelm Debuggen release kompiliert oder Tracing-Richtlinien
+0

Ich frage unser Web-Service-Team über die Aktivierung der Komprimierung. Der Viewstate kann nicht optimiert werden Soweit ich weiß und die anderen 2 sind entweder nicht möglich oder wurden bereits ausprobiert – RSolberg

+0

Wenn Sie Viewstate nicht loswerden können, kann Kompression nicht viel helfen.ViewState wird für die Komprimierung in zufällige Daten umgewandelt und zufällige Daten werden nicht komprimiert:/Immer noch einen Versuch wert. –

1

Sie versuchen server-side viewstates verwenden könnte. Es belastet den Server etwas mehr, aber das Laden/Aktualisieren der Seite sollte viel schneller sein.

3

Wenn Sie kein Paging verwenden (wie in einem Kommentar erwähnt), ziehen Sie eine DataList oder sogar einen Repeater in Betracht, um den Overhead des Objekts selbst zu reduzieren.

0

Sie könnten die ersten X-Elemente ausgeben, dann, wenn die Seite geladen hat, holen Sie die nächsten X-Elemente und so weiter. Dies würde die Seite wahrscheinlich für den Endbenutzer auffälliger erscheinen lassen.

Sie sollten auch untersuchen, was genau macht die Seite langsam, auch prüfen, ob die Datenbank-Abfrage mit Indizes oder etwas optimiert werden konnte.

+0

Danke für die Idee ... Die Abfrage ist extrem schnell, es scheint wirklich im Bereich der Seitenrendering zu sein. – RSolberg

1

Sie sollten das Paging aktivieren, um Situationen zu vermeiden, in denen Hunderte von Datensätzen auf der Seite gerendert werden. Im Wesentlichen verwenden Sie die Seitensteuerelemente, um sich durch Datensätze statt durch die Bildlaufleiste zu bewegen.

Eine verwandte Option, die einem Los helfen kann, ist die Verwendung einer ObjectDataSource, die nur die Datensätze abruft, die das Raster anzeigen möchte. Dies verwendet das neue ROW_NUMBER() - Konstrukt in SQL Server. Hier ist ein Beispiel für eine ObjectDataSource-Methode, die einen bestimmten Bereich von Datensätzen abruft.Es nutzt meine DAL, aber Sie sollten eine ziemlich klare Vorstellung davon bekommen sein können:

zur Verwendung von CSS
[DataObjectMethodAttribute(DataObjectMethodType.Select, true)] 
    public List<SelectClassData> GetList(string sortType, int startRowIndex, int maximumRows) 
    { 
     if (!BusinessUtilities.SQLSafe(sortType)) 
      throw new Exception("Illegal value in request (unsafe)."); 
     startRowIndex++; 
     int EndRow = startRowIndex + maximumRows; 
     using (BSDIQuery qry = new BSDIQuery()) 
     { 
      if (sortType.Length == 0) 
       sortType = "Title"; 
      return 
       qry.Command(
        "With OrderedClassEvent as (Select ClassID, Title, StartDate, EndDate, ROW_NUMBER() OVER (ORDER BY " + sortType + ") as RowNum From ClassEvent)") 
        .Append(" Select ClassID, Title, StartDate, EndDate From OrderedClassEvent Where RowNum Between @StartRow AND ").ParamVal(startRowIndex) 
        .Append("@EndRow ").ParamVal(EndRow) 
        .Append("Order By RowNum") 
        .ReturnList<SelectClassData>(); 
     } 
    } 

Bei allem Respekt, etc., die nicht das Gitter zippier machen, aber es wird erlauben Sie das Gitter definieren Attribute (zB FooterStyle, HeaderStyle usw.) in einer "Skin" -Datei, die Sie in einem Themenverzeichnis verstecken. Es ist optional, aber Sie können auch die Stile für jedes Attribut mithilfe von CSS definieren. Die Skin-Datei zeigt ein "Template" GridView mit der CssClass für jedes Attribut. Wenn Sie das Raster erstellen, beziehen Sie sich auf die Skin-Datei und dann nur lassen Sie alle Attributdefinitionen in dieser Datei (die Gridview wird sie nicht brauchen, weil es weiß, was zu tun ist basierend auf der Haut) . Dies ist besonders gut, wenn Sie möchten, dass alle Ihre Gitter gleich aussehen.

0

Wie Paginierung nicht erlaubt ist, ich auf jeden Fall erkunden Gesamtnutzlast dieses Gitters zu reduzieren:

  1. Mit Repeater-Steuerung und bauen nativen TABLE dieses Gitter anstelle von Datagrid-Steuerelement zu machen - auf diese Weise ich die vollständige Kontrolle haben über Nutzlast. Etwas wie:
  2. Verwenden von 100% CSS-Stil anstelle von Steuerelementen.
  3. Deaktivieren des Ansichtszustand (?)

Beachten Sie, dass Performance-Problem weniger ist hier zu asp.net beziehen und auf die Menge der Datenübertragung vom Server zum Client-Rechner.

0
  • Viewstate deaktivieren, wenn es möglich ist.
  • Verwenden Repeater statt Gitter und verwenden Ihre eigenen HTML, das würde verringern die gerenderte Auszeichnungs
  • Versuchen zu verwenden gespeicherte Prozedur
  • Wenn Sie Methoden, die einige Daten aus anderen Tabellen in immer Ihre db. Verwenden Sie die Ansicht
Verwandte Themen