Freigeben über


Leistung (C# und Visual Basic)

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, z. B. in einer dichten Schleife, verketten, verwenden Sie System.Text.StringBuilder anstelle des +-Operatoren in C# oder der Verkettungsoperatoren in Visual Basic. Weitere Informationen finden Sie unter Gewusst wie: Verketten von mehreren Zeichenfolgen (C#-Programmierhandbuch) und Verkettungsoperatoren in Visual Basic.

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 (C#-Programmierhandbuch) und Objektlebensdauer: Erstellen und Zerstören von Objekten (Visual Basic).

Weitere Ressourcen

Siehe auch

Konzepte

C#-Programmierhandbuch

Weitere Ressourcen

Programmierungskonzepte

Visual Basic-Programmierhandbuch