Frage

Ich bin ein total Neuling, aber ich war ein kleines Programm zu schreiben, die auf Strings in C # gearbeitet, und ich bemerkte, dass, wenn ich anders ein paar Dinge getan hat, der Code deutlich schneller ausgeführt werden.

So hatte es mich fragen, wie gehen Sie über Ihren Code der Ausführungsgeschwindigkeit Taktung? Gibt es (kostenlos) Dienstprogramme? Sie gehen über es auf die altmodische Art und Weise mit einem System.Timer und do it yourself?

War es hilfreich?

Lösung

Was Sie beschreiben, wie Leistungsprofil bekannt. Es gibt viele Programme, die Sie diese so tun bekommen als Jetbrains Profiler oder System.Diagnostics.Stopwatch und eine einfache Console.WriteLine, wie Sie beschrieben.

Denken Sie auch daran, dass der C # JIT-Compiler Code in Abhängigkeit von der Art und Häufigkeit optimiert sie genannt wird, so spielen, um mit Schleifen von Größen und Methoden wie rekursive Aufrufe unterschiedliche ein Gefühl dafür zu bekommen, was am besten funktioniert.

Andere Tipps

ANTS Profiler von RedGate eine wirklich schöne Performance Profiler ist. dotTrace Profiler von JetBrains ist auch groß. Diese Tools ermöglichen es Ihnen, Performance-Metriken, um zu sehen, dass die jede einzelne Linie aufgerissen werden kann.

Geröll Schuss von ANTS Profiler: ANTS http://www.red-gate.com/products/ ants_profiler / images / app / timeline_calltree3.gif

Wenn Sie sicherstellen möchten, dass eine bestimmte Methode bleibt innerhalb eines bestimmten Leistungsschwelle während Unit-Tests, würde ich die Stopwatch Klasse die Ausführungszeit für ein Verfahren ein oder mehrmals in einer Schleife zu überwachen und die durchschnittliche und dann Assert gegen das Ergebnis.

Nur zur Erinnerung - stellen Sie sicher, in Release zu kompilieren, nicht debuggen! (Ich habe diesen Fehler von erfahrenen Entwicklern gesehen - es ist einfach zu vergessen).

Was sind Sie beschreibt, ist 'Performance Tuning'. Wenn wir über Performance-Tuning gibt es zwei Winkel zu ihm sprechen. (A) Die Reaktionszeit - wie lange es dauern eine bestimmte Anforderung / Programm auszuführen. (B) Der Durchsatz - Wie viele Anfragen kann es in einer Sekunde ausführen. Wenn wir in der Regel ‚Optimieren‘ - wenn wir unnötige Verarbeitung sowohl Reaktionszeit als auch beseitigen, wie Durchsatz verbessert. Allerdings, wenn Sie warten Ereignisse in Sie Code haben (wie Thread.sleep (), I / O warten usw.) Ihre Reaktionszeit betroffen ist jedoch Durchsatz ist nicht betroffen. Durch die Annahme der Parallelverarbeitung (Laichen mehrere Threads) können wir Reaktionszeit verbessern, aber Durchsatz nicht verbessert werden. Typisch für die Server-seitige Anwendung sowohl Reaktionszeit und Durchsatz sind wichtig. Für Desktop-Anwendungen (wie IDE) Durchsatz ist nicht nur wichtig, Reaktionszeit ist wichtig.

Sie können Reaktionszeit von ‚Performance Testing‘ messen - Sie notieren nur die Antwortzeit für alle wesentlichen Transaktionen. Sie können den Durchsatz von ‚Load Testing‘ messen - Sie müssen Anfragen von ausreichend großen Anzahl von Threads / Kunden kontinuierlich pumpen, so dass die CPU-Auslastung von Server-Maschine 80-90% ist. Wenn wir Anforderung pumpen müssen wir das Verhältnis zwischen den verschiedenen Transaktionen (so genannte Transaktion mix) halten - für zB: in einem Reservierungssystem gibt 10 Buchung für jede 100 Suche sein wird. es wird eine Stornierung für jede 10 Buchung etc sein.

Nach der Identifizierung der Transaktionen erfordern Tuning für Reaktionszeit (Leistungstests) können Sie die Hot Spots identifizieren kann durch einen Profiler verwenden. Sie können durch einen Vergleich der Reaktionszeit * Bruchteil dieser Transaktion die Hot Spots für den Durchsatz identifizieren. Es sei angenommen, auf der Suche, Buchung, Stornierung Szenario Verhältnis 89: 10: 1. Die Reaktionszeit beträgt 0,1 sec, 10 sec und 15 sec. Last für Suche - 0,1 * 0,89 = 0,089 Last für Buchung- 10 * 0,1 = 1 Last für cancell = 15 * .01 = 0,15 Hier Tuning Buchung wird eine maximale Wirkung auf den Durchsatz ergeben. Sie können auch Hot Spots für den Durchsatz identifizieren durch Thread-Dumps unter (im Fall von Java-basierten Anwendungen) wiederholt.

einen Profiler verwenden.

Wenn Sie eine bestimmte Methode zu Zeit brauchen nur die Stoppuhr-Klasse könnte eine gute Wahl sein.

ich die folgenden Dinge: 1) I verwenden Zecken (z.B. in VB.Net Now.ticks) für die aktuelle Zeitmessung. Ich subtrahiere die Ausgänge Zecken aus dem fertigen Tick Wert und dividieren durch TimeSpan.TicksPerSecond zu bekommen, wie viele Sekunden dauerte es. 2) Ich vermeide UI-Operationen (wie Console.WriteLine). 3) Ich betreibe den Code über einen wesentlichen Schleife (wie 100.000 Iterationen) Nutzung / OS-Variablen als beste Faktor, wie ich kann.

Sie können die Stoppuhr-Klasse Zeit Methoden. Denken Sie daran, das erste Mal, langsam wird oft durch Code jitted werden müssen.

Es ist eine native .NET-Option (Team Edition für Software-Entwickler), die einige Performance-Analyse Bedürfnisse eingehen kann. Von 2005 .NET IDE-Menü wählen Sie Tools-> Performance Tools-> Performance Wizard ...

[GSS ist wahrscheinlich richtig, dass Sie Team Edition haben muss]

Dies ist einfaches Beispiel für die Prüfung Code Geschwindigkeit. Ich hoffe, dass ich Ihnen geholfen

class Program {
    static void Main(string[] args) {
        const int steps = 10000;
        Stopwatch sw = new Stopwatch();

        ArrayList list1 = new ArrayList();
        sw.Start();
        for(int i = 0; i < steps; i++) {
            list1.Add(i);
        }
        sw.Stop();
        Console.WriteLine("ArrayList:\tMilliseconds = {0},\tTicks = {1}", sw.ElapsedMilliseconds, sw.ElapsedTicks);

        MyList list2 = new MyList();
        sw.Start();
        for(int i = 0; i < steps; i++) {
            list2.Add(i);
        }
        sw.Stop();
        Console.WriteLine("MyList:  \tMilliseconds = {0},\tTicks = {1}", sw.ElapsedMilliseconds, sw.ElapsedTicks);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top