Gestern habe ich einen Artikel darüber gepostet, wie man die .NET-Leistung maximiert. Vielen Dank für Ihre Kommentare. Ich möchte mich bei denen bedanken, die geduldig Kommentare geschrieben haben hat sehr profitiert.
Der gestrige Artikel konzentrierte sich hauptsächlich auf die Verbesserung einiger Details beim Schreiben von Code. Es mag schwierig sein, die Leistungsverbesserung tatsächlich zu spüren, aber als Programmierer ist die ständige Verbesserung der Qualität Ihres eigenen Codes das Ziel, das Sie ständig verfolgen.
Tatsächlich entspricht die Geschwindigkeit der Hardware mit der Entwicklung der Hardware mittlerweile weitgehend den Bedürfnissen der meisten Menschen. Einige Leute behaupten sogar, dass Algorithmen in der aktuellen Softwareentwicklung immer weniger effektiv werden. Ich erinnere mich, dass ich mir zuvor ein Datenstrukturvideo vom MIT angesehen habe und der Professor, der die Vorlesung hielt, eine Frage stellte (ich erinnere mich nicht mehr genau, aber das meinte er): Warum sind wir immer noch hier, da Algorithmen nicht mehr wichtig sind? Wie sieht es mit der Forschung aus? Die Antwort, die er gab, war „GESCHWINDIGKEIT“. Wir streben nach Geschwindigkeit, genau wie Rennfahrer nach Geschwindigkeit streben!
Bei der Entwicklung vieler Systeme steht heutzutage nicht mehr die Geschwindigkeit an erster Stelle, sondern oft auch die Stabilität, Sicherheit, Wiederverwendbarkeit usw. Heutzutage sind Entwurfsmuster, Entwicklungsarchitektur usw. nicht hauptsächlich darauf ausgelegt, Leistungsprobleme zu lösen. Die oben genannten Punkte werden von Analysten und Architekten berücksichtigt. Kleine Programmierer wie wir können das Programm nur an einigen kleinen Stellen im Code, einer Klasse, einer Methode und einer Codezeile optimieren. Ich finde es gut, den Details mehr Aufmerksamkeit zu schenken.
Okay, genug Unsinn, lassen Sie uns über das heutige Thema sprechen. Der Leistungsaufwand vieler derzeit entwickelter Netzwerksysteme liegt hauptsächlich im Lesen und Übertragen von Daten. Schnellere Lesegeschwindigkeit und geringere Netzwerkbandbreitennutzung sind die Ziele, die wir verfolgen. Ich werde darüber sprechen, wie die Leistung von .net unter diesem Aspekt verbessert werden kann.
1. Paging von Daten in der Datenschicht. Es kann über ExcuteReader oder gespeicherte Prozeduren implementiert werden, daher werde ich nicht auf Details eingehen.
2. Versuchen Sie, ExcuteReader zum Lesen von Daten zu verwenden Bei PetShop 4.0 kann auf alle Daten zugegriffen werden. Sie werden alle mit ExcuteReader implementiert, es sei denn, Sie haben spezielle Anforderungen an die Nichtverbindung (z. B. SmartClient usw.).
3. In nicht verbundenen Situationen bietet die Verwendung von DataTable eine bessere Leistung als die Verwendung von DataSet, es sei denn, Sie möchten mehrere relationale Tabellen speichern.
4. Verwenden Sie die ImportRow-Methode von DataTable.
In einigen Fällen ist es erforderlich, eine große Datenmenge von einer DataTable in eine andere zu kopieren. Wenn die Datenmenge gering ist, kann dies die Leistung erheblich verbessern Erreicht mehr als 10.000 Zeilen, kann erheblich verbessert werden und kann ein Vielfaches erreichen.
5. Serialisieren Sie Daten zur einfachen Übertragung in Binärdateien.
Wenn wir DataSet- und DataTable-Objekte verarbeiten, können wir sie in XML-Dateien serialisieren. Wenn sie über das Netzwerk übertragen werden sollen, verursachen XML-Dateien Ressourcenprobleme wie Speicher und Netzwerkbandbreite. Zu diesem Zeitpunkt können wir es in eine Binärdatei serialisieren, sodass die generierten Dateien erheblich reduziert werden. Der Code lautet wie folgt:
FileStream fs = new fileStream(@"XMLData.bin",FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs,XMLData);
fs.colse();
Die so generierte Binärdatei heißt XMLBinary. Wenn Sie sie direkt mit WINHEX öffnen, können Sie darin einige XML-Tags sehen. Wenn die Datenmenge groß ist, fügen Sie eine Codezeile hinzu:
XMLData.RemortingFormat = SerializationFormat.Binary;
Die zu diesem Zeitpunkt generierte Datei wird als TrueBinary-Datei bezeichnet. Bei der Verarbeitung einer großen Anzahl (mehr als 10.000 Zeilen) beträgt die generierte Dateigröße einen Bruchteil von XMLBinary. Das Schema wird während der Serialisierung automatisch gespeichert, was den Desequenzierungsprozess vereinfacht. Ich weiß noch nicht, wie stark der Leistungsabfall durch die Deserialisierung im Vergleich zum direkten Lesen des XML sein wird.
6. Nutzen Sie Verbindungspools sinnvoll.
Verbindungspooling spielt eine große Rolle bei der Verbesserung der Leistung und ist standardmäßig aktiviert. Die standardmäßige Mindestpoolgröße ist 0, was im Allgemeinen auf einen relativ kleinen Wert eingestellt ist, z. B. 5. Die standardmäßige maximale Poolgröße beträgt 100, was für die meisten WEB-Sites ausreichend ist. Erhöhen Sie den Wert bei großen Websites entsprechend.
7. Entwickeln Sie mit SQLCLR
Wenn Sie sich auf die Einführung der SQL Server-Reihe konzentrieren, sollten Sie sich mit SQLCLR befassen. Es ist sehr leistungsstark und kann in vielen Situationen (insbesondere bei großen Unternehmensanwendungen) die Leistung verbessern.
8. Greifen Sie über statische Klassen auf APP.Config/Web.Config zu
Wir haben viele Konfigurationsinformationen in APP.Config/Web.Config, auf die sehr häufig zugegriffen wird. Zu diesem Zeitpunkt erstellen wir eine statische Klasse. Auf alle Attribute wird über die statische Klasse zugegriffen, was die Leistung bis zu einem gewissen Grad verbessern kann. Die statische Klasse instanziert Config nur einmal, und APP.Config/Web.Config generiert viele E/A-Vorgänge.
öffentliche statische Klasse MyWebConfig
{
statische MyWebConfig()
{
ConnString =
ConfigurationManager.ConnectionStrings["Verbindung"].
ConnectionString;
}
öffentliche statische Zeichenfolge DbConnectionString
{
erhalten
{
return ConnString;
}
}
}
Okay, das war's für heute. Ich möchte Sie gerne auf Fehler und Mängel hinweisen. Sie können gerne bessere Meinungen einbringen und gemeinsam Fortschritte machen.