1. Auswahl von SqlDataRead und Dataset Vorteile von Sqldataread: Das Lesen von Daten erfolgt sehr schnell. Wenn die zurückgegebenen Daten nicht viel Verarbeitung erfordern, wird die Verwendung von SqlDataReader empfohlen, dessen Leistung viel besser ist als die von datset. Nachteile: Die Verbindung zur Datenbank kann nicht geschlossen werden, bis die Daten gelesen wurden
(SqlDataReader liest Daten in einer schnellen Vorwärtsrichtung). Die SqlDataReader-Klasse bietet eine Möglichkeit, den aus der SQL Server-Datenbank abgerufenen Vorwärtsdatenstrom zu lesen. Sie verwendet SQL Server Das native Netzwerkdatenübertragungsformat liest Daten direkt aus der Datenbankverbindung. DataReader muss rechtzeitig explizit geschlossen werden, um die Datenverbindung rechtzeitig freizugeben.)
Der Datensatz liest die Daten und speichert sie im Speicher zwischen. Nachteile: Hoher Speicherverbrauch. Wenn Sie die zurückgegebenen Daten stark verarbeiten müssen, ist es besser, Dataset zu verwenden, um die Verbindungsvorgänge zur Datenbank zu reduzieren. Vorteile: Sie müssen nur einmal eine Verbindung herstellen, um die Verbindung zur Datenbank zu schließen
. Wenn Sie eine große Datenmenge lesen und die zurückgegebenen Daten nicht viel verarbeiten möchten, verwenden Sie SqlDataReader Bei der Verarbeitung der zurückgegebenen Daten ist es sinnvoller, datset zu verwenden. Die Wahl von SqlDataReader und Dataset hängt von der Implementierung der Programmfunktionen ab.
2. ExecuteNonQuery und ExecuteScalar
müssen beim Aktualisieren von Daten keinen Ergebnissatz zurückgeben. Es wird empfohlen, ExecuteNonQuery zu verwenden. Da keine Ergebnismenge zurückgegeben wird, kann auf die Netzwerkdatenübertragung verzichtet werden. Es gibt lediglich die Anzahl der betroffenen Zeilen zurück. Wenn Sie nur Daten aktualisieren müssen, ist der Leistungsaufwand von ExecuteNonQuery relativ gering.
ExecuteScalar gibt nur die erste Spalte der ersten Zeile im Ergebnissatz zurück. Verwenden Sie die ExecuteScalar-Methode, um einen einzelnen Wert (z. B. eine ID-Nummer) aus der Datenbank abzurufen. Dieser Vorgang erfordert weniger Code als die Verwendung der ExecuteReader-Methode, um die Vorgänge auszuführen, die zum Generieren eines einzelnen Werts für die zurückgegebenen Daten erforderlich sind.
*Aktualisieren Sie die Daten einfach mit ExecuteNonQuery. Die Abfrage eines einzelnen Werts verwendet die ExecuteScalar-Datenbindungsoption
3. Datenbindung DataBinder
allgemeine Bindungsmethode <%# DataBinder.Eval(Container.DataItem, "field name") %> Verwenden Sie DataBinder.eval Die Bindung kümmert sich nicht um die Datenquelle (Dataread oder Datensatz). Sie müssen sich keine Gedanken über den Datentyp machen, der dieses Datenobjekt in einen String umwandelt. Es wurde viel Arbeit an der zugrunde liegenden Bindung geleistet, wobei Reflexionsfunktionen zum Einsatz kamen. Nur weil es bequem zu verwenden ist, wirkt es sich auf die Datenleistung aus. Werfen wir einen Blick auf <%# DataBinder.Eval(Container.DataItem, "field name") %>. Wenn es an einen Datensatz gebunden ist, ist DataItem tatsächlich eine DataRowView (wenn es an einen Datenleser (Dataread) gebunden ist, ist es ein IdataRecord.) Daher wird die Leistung durch die direkte Konvertierung in eine DataRowView erheblich verbessert.
<%# ctype(Container.DataItem,DataRowView).Row("field name") %>
*Es wird empfohlen, <%# ctype(Container.DataItem,DataRowView).Row("field name") %> für Daten zu verwenden verbindlich. Wenn die Datenmenge groß ist, kann die Geschwindigkeit um das Hundertfache erhöht werden. Achten Sie bei der Verwendung auf zwei Aspekte: 1. Sie müssen <%@ Import namespace="System.Data"%> zur Seite hinzufügen. 2. Achten Sie auf die Groß-/Kleinschreibung des Feldnamens (achten Sie besonders darauf). Wenn es nicht mit der Abfrage übereinstimmt, ist es in einigen Fällen langsamer als <%# DataBinder.Eval(Container.DataItem, "field name") %>. Wenn Sie die Geschwindigkeit weiter verbessern möchten, können Sie die Methode <%# ctype(Container.DataItem,DataRowView).Row(0) %> verwenden. Allerdings ist die Lesbarkeit nicht hoch.
Das Obige ist die Schreibmethode von vb.net. In c#: <@% ((DataRowView)Container.DataItem)["field name"] %>
Die einfachste Möglichkeit, den Status jedes Ausführungsprozesses auf der Seite anzuzeigen: Sie können die Details anzeigen, wenn das Trace-Attribut der Seite vorhanden ist WAHR.
1. Verwenden Sie gespeicherte Prozeduren:
1. Leistung: Gespeicherte Prozeduren bieten viele erweiterte Funktionen, die in der Standard-SQL-Sprache nicht zu finden sind. Seine Fähigkeit, Parameter zu übergeben und logische Ausdrücke auszuführen, hilft Anwendungsdesignern bei der Bewältigung komplexer Aufgaben. Darüber hinaus wird die gespeicherte Prozedur auf dem lokalen Server gespeichert, wodurch die Netzwerkübertragungsbandbreite und die für die Ausführung der Prozedur erforderliche Ausführungszeit reduziert werden. (Die gespeicherte Prozedur hat die SQL-Anweisung vorkompiliert, sodass ihre Ausführungsgeschwindigkeit viel schneller ist als die Ausführung der SQL-Anweisung im Programm.)
2. Programmstruktur: Aus Sicht der Programmskalierbarkeit wirkt sich die Verwendung gespeicherter Prozeduren auf zukünftige Änderungen des Programms aus aus Bequemlichkeitsgründen. Wenn sich beispielsweise die Struktur der Datenbank ändert, müssen Sie nur die entsprechende Speicherstruktur und den aufrufenden Teil des Programms ändern. Dieser Teil liegt nicht im Rahmen dieses Artikels und gehört zum Programmstrukturdesign. Deshalb werde ich hier nicht näher darauf eingehen.
3. Programmsicherheit: SQL-Injection-Angriffe können durch den Einsatz gespeicherter Prozeduren vermieden werden.
2. Optimierung von Abfrageanweisungen (für SQL Server 2000)
Viele Leute schreiben SQL-Anweisungen nur für diesen Zweck, ohne die Ausführungseffizienz der SQL-Anweisung zu berücksichtigen. Hier stelle ich nur eine Methode zur Optimierung der Tabellenreihenfolge bereit. (Die Optimierung und Prinzipien von SQL-Anweisungen werden in meinen SQL Server2000-Studiennotizen erläutert.)
Für die Ausführungseffizienz von SQL-Anweisungen können Sie den Abfrageanalysator von SQL Server2000 verwenden Sehen Sie sich den Ausführungsprozess der Anweisungen an.
Tabellenreihenfolge optimieren: Unter normalen Umständen optimiert SQL Server automatisch Tabellenverbindungen. Beispiel: Wählen Sie Name, Nr. aus A aus, verbinden Sie B mit A. id=B.id verbinden Sie C mit C.id=A.id, wobei name='wang'Obwohl
die Tabelle A zuerst in Von, dann in B und schließlich aufgeführt ist Es ist C. Aber SQL Server verwendet möglicherweise zuerst die C-Tabelle. Sein Auswahlprinzip besteht darin, die Abfrage auf eine einzelne Zeile oder einige Zeilen zu beschränken, sodass die Gesamtmenge der in anderen Tabellen durchsuchten Daten reduziert werden kann. In den meisten Fällen trifft SQL Server die optimale Wahl. Wenn Sie jedoch feststellen, dass eine komplexe Join-Abfrage langsamer als erwartet ist, können Sie mit der Anweisung SET FORCEPLAN erzwingen, dass SQL Server die Tabellen in der Reihenfolge verwendet, in der sie angezeigt werden. Fügen Sie wie im obigen Beispiel hinzu: SET FORCEPLAN ON.......SET FORCEPLAN OFF Die Ausführungsreihenfolge der Tabelle wird in der von Ihnen geschriebenen Reihenfolge ausgeführt. Sehen Sie sich die beiden Ausführungseffizienzen im Query Analyzer an, um die Reihenfolge auszuwählen, in der Tabellen verknüpft werden.
*Verwenden Sie SET FORCEPLAN, um die Tabellenverbindungssequenz auszuwählen
. 3. Die Seitenoptimierung (.aspx)
konzentriert sich hauptsächlich auf mehrere Seitenattribute
1. EnableViewState (der Ansichtsstatus der Seite). Wird auf „false“ gesetzt, wenn keine besonderen Anforderungen vorliegen. Bei ViewState muss jedes Objekt zuerst in ViewState serialisiert und dann per Postback deserialisiert werden, sodass für die Verwendung von ViewState keine Kosten anfallen. Verwenden Sie so wenige Objekte wie möglich und reduzieren Sie nach Möglichkeit die Anzahl der Objekte, die Sie in ViewState einfügen. Viewstate kann grundsätzlich in den folgenden Situationen deaktiviert werden:
(1) Seitensteuerung (.ascx)
(2) Die Seite wird nicht an sich selbst zurückgegeben.
(3) Es ist keine Ereignisverarbeitung für Kontrollen erforderlich.
(4) Das Steuerelement verfügt über keine dynamischen oder datengebundenen Eigenschaftswerte (oder wird im Code für jedes Postpack behandelt).
Deaktivieren Sie ViewState für eine einzelne Seite oder für jede Seite wie folgt: Einzelne Seite: <%@ Page EnableViewState=" False" %> Jede Seite: In web.config
2. Seitenlayoutmodell. Es wird empfohlen, Flowlayout zu verwenden (Elemente werden ohne absolute Positionierungsattribute hinzugefügt). Gridlayout (absolute Positionierungsattribute) erzeugt aufgrund der Verwendung absoluter Positionierung mehr Code als Flowlayout, hauptsächlich der Positionierungsinformationen des Steuerelements.
3. Denken Sie beim Freigeben des Projekts daran, den Debug-Status der Seite freizugeben.
4. Optimierung der HTML-Sprache. Mein Vorschlag ist, HTML/JavaScript zu beherrschen und weniger von vs.net2003 automatisch generierten Code zu verwenden. Dadurch wird automatisch nutzloser HTML-Code generiert.
5. Wenn Sie die intelligente Navigation auf „True“ setzen, kann die Benutzerleistung erheblich verbessert werden. Die Aktivierung dieser Eigenschaft hat nur geringe Auswirkungen auf den Client und den Server. Sie kann die Teile, die aktualisiert werden müssen, intelligent aktualisieren.
4. Auswahl der Steuerelemente:
Auswahl an HTML-Steuerelementen und Serversteuerelementen. Der Komfort und die funktionale Umsetzung, die Serversteuerelemente bieten, werden von HTML-Steuerelementen nicht erreicht. Dies erfolgt jedoch auf Kosten serverseitiger Ressourcen. Mein persönlicher Vorschlag: Wenn das HTML-Steuerelement die gewünschten Funktionen nicht erreichen kann und dies in Kombination mit einigen Skriptsprachen (z. B. javascrpt/vbscript) nicht möglich ist. Erst dann wird die Serversteuerung ausgewählt. Versuchen Sie nach der Auswahl des Serversteuerelements, dessen Steuerung zu optimieren, z. B. das Abbrechen einiger Seitenzustände usw. (siehe insbesondere die Optimierung des Steuerelements:
Erklären Sie hauptsächlich einige gängige Datensteuerelemente:
DataGrid: wird mit dem leistungsstärksten geliefert
).Datenanzeige Das Steuerelement verfügt über viele integrierte praktische Funktionen wie das Ändern, Löschen, Hinzufügen und Paginieren von Daten. Wenn Sie nur Daten anzeigen müssen, wählen Sie nicht DataGrid (es speichert alle Daten im Ansichtszustand). Microsoft hat jedoch viel Arbeit in die unterste Ebene des automatischen Pagings investiert Es ist bequem zu verwenden und der Leistungsaufwand ist enorm.
DataList: Es hat viel weniger Funktionen als DataGrid. Aber es ist viel anpassbarer. Die einzigartige mehrzeilige Datenanzeige bringt uns viel Komfort. Es kann grundsätzlich die Funktionen implementieren, die DataGrid erreichen kann. Es wird daher empfohlen, es zu verwenden.
Repeater: Am wenigsten funktional, aber sehr anpassbar. Es wird empfohlen, es zu verwenden, wenn Sie nur Daten anzeigen müssen. Durch die Reduzierung vieler Funktionen ist der Verbrauch an Serverleistung minimal. Wenn es darum geht, Daten anzuzeigen, wähle ich grundsätzlich Repeater, dann DataList und schließlich DataGrid
* und versuche, das HTML-Steuerelement auszuwählen. Funktionen, die auf dem Client implementiert werden können, werden auf dem Client implementiert (Kenntnisse in Javascript), wodurch der Druck auf den Server verringert wird. Auswahlsequenz für Datensteuerelemente: Repeater, DataList, DataGrid
5. Optimierung der Serversteuerelemente:
1.
Der Ansichtsstatus des Viewstate-Steuerelements ist grundsätzlich derselbe wie der Ansichtsstatus der Seite. Wird verwendet, um einige Zustände des Steuerelements zu speichern. Das Verarbeitungsprinzip ist dasselbe wie das Verarbeiten des Ansichtszustands der Seite. Wenn Sie interessiert sind, können Sie Datagrid zum Binden von Daten verwenden, um die von Viewstate gespeicherte Datenmenge zu testen. Die gespeicherten Daten entsprechen im Wesentlichen der von Datagrid angezeigten Datenmenge.
2. Ispostpack
ist standardmäßig auf „false“ gesetzt. Es muss auf „true“ gesetzt werden, wenn ein Ereignis generiert werden muss.
Die Optimierung des Steuerelements hängt hauptsächlich von Ihrer Vertrautheit mit diesem Steuerelement ab. Je besser Sie das Innenleben einer Steuerung verstehen, desto besser können Sie sie entsprechend optimieren.
Die Leistungsoptimierung lässt sich nicht in wenigen Sätzen erklären. Die Leistungsoptimierung beruht auf der Ansammlung täglicher Erfahrungen und dem kontinuierlichen Verständnis der Funktionsprinzipien des Programms.
6. Ausnahmeprobleme
Es besteht keine Notwendigkeit, Ausnahmen für allgemeine Probleme zu verwenden, z. B. Probleme, bei denen der Benutzer nicht im Forum existiert, das Benutzerkennwort falsch ist usw., da das Instanziieren einer Ausnahme viele Ressourcen erfordert und ausgefüllt werden muss Die Ausnahmeinformationen (Ausnahmetyp, Ausnahmeort, an dem die Ausnahme ausgelöst wird) usw.) dienen natürlich nicht der Vermeidung der Verwendung von Ausnahmen, sondern der Behandlung notwendiger Ausnahmen. Das Prinzip für Ausnahmen lautet: Verwenden Sie sie nicht, wenn Sie können. und generieren Sie keine eigenen Ausnahmen, wenn Sie die vorhandenen Ausnahmen im System verwenden können.