Leistung (C#-Programmierhandbuch)

Aktualisiert: Juli 2008

Die Begriff Leistung bezieht sich im Allgemeinen auf die Ausführungsgeschwindigkeit eines Programms. In manchen Fällen können Sie die Ausführungsgeschwindigkeit erhöhen, indem Sie im Quellcode bestimmte Grundregeln befolgen. In einigen Programmen müssen Sie den Code genau untersuchen und mithilfe von Profilern sicherstellen, dass dieser so schnell wie möglich ausgeführt wird. In anderen Programmen müssen Sie keine solche Optimierung ausführen, da Code in der aktuellen Form mit akzeptabler Geschwindigkeit ausgeführt wird.

Wenn Sie die Leistung messen und optimieren, sollten Sie die folgenden allgemeinen Richtlinien beachten:

  • Beginnen sie, indem Sie Leistungsziele festlegen und die Leistung des Programms messen, um festzustellen, wann der Code diese Ziele nicht erfüllt.

  • Schreiben Sie den Code anfangs so, dass dieser korrekt ist, guten Entwurfsprinzipien folgt und Ihre Absicht klar wird. Optimieren Sie ihn später nur, wenn Sie feststellen, dass die Leistungsziele nicht erfüllt werden. Code, der auf Leistungsoptimierung ausgerichtet ist, ist oft schwieriger zu lesen und zu verwalten. Im Allgemeinen ist es empfehlenswert, lesbaren, stabilen und verwaltbaren Code zu erstellen, selbst wenn dieser etwas langsamer als der am stärksten optimierte Code ist, der möglich wäre.

  • Wenn Sie eine Optimierung vornehmen müssen, beginnen Sie mit den langsamsten Teilen des Programms. Wenn Sie feststellen, dass ein Programm die Leistungsziele nicht erfüllt, ermitteln Sie die Abschnitte, deren Leistung verbessert werden kann, sowie die Leistungsabfälle, die die Hauptursache des Problems bilden. Normalerweise lohnt es sich nicht, eine selten aufgerufene Methode zu optimieren oder die Methode A für eine Ausführung in weniger als 50 Millisekunden zu optimieren, wenn das Programm als Ganzes 30 Sekunden auf die Ausführung von Methode B in einem anderen Thread warten muss.

Boxing und Unboxing

Am besten verwenden Sie keine Werttypen in Situationen, in denen sie öfter geschachtelt werden müssen, z. B. in nicht generischen Auflistungsklassen wie System.Collections.ArrayList. Sie können die Verschachtelung von Werttypen vermeiden, indem Sie generische Auflistungen, z. B. System.Collections.Generic.List<T>, verwenden. Boxing und Unboxing sind rechenintensive Prozesse. Wenn ein Werttyp mittels Boxing konvertiert wird, muss ein völlig neues Objekt erstellt werden. Dies kann bis zu 20-mal länger dauern als eine einfache Zuweisung eines Verweises. Eine Umwandlung durch Unboxing kann vier Mal mehr Zeit benötigen als eine Zuweisung. Weitere Informationen finden Sie unter Boxing und Unboxing.

Zeichenfolgen

Wenn Sie eine große Anzahl von Zeichenfolgenvariablen verketten, z. B. in einer kurzen Schleife, verwenden Sie statt des +-Operators von C# System.Text.StringBuilder. Weitere Informationen finden Sie unter Gewusst wie: Verketten von mehreren Zeichenfolgen (C#-Programmierhandbuch).

Destruktoren

Leere Destruktoren sollten nicht verwendet werden. Wenn eine Klasse einen Destruktor enthält, wird ein Eintrag in der Finalize-Warteschlange erstellt. Wenn der Destruktor aufgerufen wird, wird der Garbage Collector aufgerufen, um die Warteschlange zu verarbeiten. Wenn der Destruktor leer ist, führt dies einfach zu einem Leistungsverlust. Weitere Informationen finden Sie unter Destruktoren.

Weitere Ressourcen

Siehe auch

Konzepte

C#-Programmierhandbuch

Referenz

Sicherheit (C#-Programmierhandbuch)

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Juli 2008

Informationen zum Abschnitt über Boxing und Unboxing hinzugefügt.

Informationsergänzung.

Juli 2008

Abschnitt zu Zeichenfolgen hinzugefügt.

Informationsergänzung.

Juli 2008

Informationen zur Einführung hinzugefügt.

Informationsergänzung.