Während ich Anwendungen erstelle, frage ich mich ständig, ob dies der beste Weg ist, eine bestimmte Funktionalität auszuführen oder zu implementieren. Oft poste ich Fragen zum Stackoverflow oder zu einem anderen Forum, die nur Feedback benötigen, um Kommentare dazu zu erhalten, wie der Wagen in Bezug auf die Leistung nicht "vor das Pferd gestellt" werden soll. Denken die meisten Programmierer wirklich nicht über die Leistung nach, bis die Anwendung beendet ist, oder ist die Leistung absolut inakzeptabel? Ich verstehe, dass sich Entwicklungsumgebungen von Produktionsumgebungen unterscheiden und dass Sie sich nicht vollständig auf die Ergebnisse Ihres Entwickler-Laptops verlassen sollten. Es gibt jedoch Vorgehensweisen und Techniken, die eine bessere Leistung bringen als andere.
Ist es üblich, die Leistung während des gesamten Entwicklungsprozesses zu berücksichtigen? Soll ich diese Überlegungen verschieben, bis die Leistung tatsächlich steigt?
Aktualisieren
Um es klar zu sagen, ich spreche über die Situation, in der Sie überlegen oder gerade an einem Teil der Funktionalität arbeiten. Sie wissen, dass es mehrere Möglichkeiten zur Implementierung gibt, aber Sie sind sich nicht sicher, wie gut sich die einzelnen Implementierungen skalieren lassen. Es kann auch verschiedene Techniken geben, mit denen Sie nicht einmal vertraut sind. Im kleinen Maßstab wäre wahrscheinlich jeder der Ansätze angemessen, aber im größeren Maßstab werden einige mithalten und andere nicht. Wenn ich nach Meinungen oder Ratschlägen frage, lautet die Antwort oft: Mach dir später Sorgen ...
quelle
Antworten:
Die Verschiebung von Leistungsüberlegungen beruht manchmal auf einer fehlerhaften Anwendung des Ausdrucks:
Wenn Sie das vollständige Zitat lesen, versuchte Knuth zu sagen, dass Mikrooptimierungen, die während der Entwicklung ohne Profilerstellung angewendet wurden, im Allgemeinen nicht empfohlen werden, da sie zu weniger wartbarem Code führen, ohne dass wesentliche Leistungsvorteile erzielt werden.
Das bedeutet jedoch nicht, dass Sie die Leistung erst in Betracht ziehen sollten, wenn die Anwendung fast fertig ist. Wenn Sie dies tun, stellen Sie möglicherweise fest, dass die Leistung unzureichend ist, Ihre Entwurfsarchitektur keine bessere Leistung unterstützt und Sie müssen von vorne beginnen.
Es gibt eine Reihe von Dingen, die Sie während der Entwicklung tun können, um eine gute Leistung ohne esoterische (und vorzeitige) Optimierungen zu erzielen:
Wenn Sie diese Schritte ausführen, werden Sie feststellen, dass die erforderliche Leistungsoptimierung auf einen kleinen Teil Ihres Codes beschränkt ist. Durch die Profilerstellung wird dieser Code identifiziert, und Sie können Ihre Leistungsverbesserungen dort einsetzen, wo sie am besten funktionieren, ohne die Wartbarkeit zu beeinträchtigen.
quelle
Folgendes ist NICHT zu beachten:
++i
schneller alsi++
?switch
schneller alsif
?inline
meine Funktionen?Folgendes ist zu beachten:
In Bezug auf den letzteren Punkt ist es meiner Erfahrung nach am besten, die Datenstruktur so zu gestalten, dass sie, wenn sie nicht normalisiert werden muss, vorübergehende Inkonsistenzen toleriert, die später durch eine Art periodischen Sweep behoben werden können. Ein Hauptmörder der Leistung ist, wenn Benachrichtigungen weitere Benachrichtigungen auslösen, die in einem Ausmaß ausgelöst werden, das Sie zuvor nicht erwartet hätten. Und oft ist es Mühe wert, Änderungen von selbst rückgängig zu machen.
Wenn Sie dies alles getan haben, haben Sie ein klares Design. Dann in regelmäßigen Abständen, wie Sie es entwickeln, Profil. ( Zufallspause ist die Methode, auf die ich mich verlasse.) Wenn Sie dann sehen können, dass die Leistung durch die Einführung eines ausgefeilteren Algorithmus verbessert wird, tun Sie dies auf jeden Fall.
quelle
Nein, Sie sollten von Anfang an über die Leistung nachdenken (insbesondere beim Entwerfen von Datenbanken). Menschen, die eine Optimierung für eine vorzeitige Optimierung halten, haben unserer Branche großen Schaden zugefügt. Das Zitat sollte ursprünglich verhindern, dass Personen sich mit Mikrooptimierungen befassen, bevor ein Problem aufgetreten war. Es war nicht beabsichtigt, überhaupt keine Optimierung durchzuführen. In einer Datenbank gibt es zum Beispiel viele bekannte Techniken, die eine schlechte Leistung erbringen. Diese zu vermeiden, ist ein Teil dessen, was Sie tun müssen. Es ist sehr schwierig, eine Datenbank mit 100.000.000 Datensätzen umzugestalten, da sie mit schlecht durchdachten Techniken erstellt wurde und wir das Problem nicht mehr vermeiden können, indem wir bessere Hardware kaufen.
quelle
Sorgen Sie sich zuerst um die Richtigkeit 1 , dann um die Wartbarkeit, dann um die Sicherheit und Zuverlässigkeit, und dann können Sie über die Leistung nachdenken. Wenden Sie diese Reihenfolge auf jeden Code an, während Sie ihn entwickeln. Es ist möglich, dass eine performante Lösung nicht einfach darin besteht, die Dinge klar und einfach zu halten.
80% der Leistung sucht den richtigen Algorithmus und die richtige Datenstruktur für das jeweilige Problem aus. Eine schlecht optimierte Quicksorte ist im Durchschnitt immer noch die beste Wahl für eine hoch optimierte Bubble-Sorte (im schlimmsten Fall ist es ein Unentschieden).
Was jeder auf SO versucht, zu verbessern, ist die Einstellung "schneller, ++ p oder p ++", bei der die Leute den Compiler so überlisten, dass sie das größere Problem aus den Augen verlieren, was zu sprödem, fehlerhaftem Code führt -gerade, falsch und das Beste von allem, nicht viel schneller als eine einfachere Lösung gewesen wäre. Ich habe mich aus erster Hand mit dieser Art von Code befasst. Ein Beispiel war so spröde, dass wir keine Änderungen vornehmen konnten , ohne es vollständig zu brechen.
1 Wobei "Korrektheit" "Erfüllung der Spezifikation" bedeutet, was nicht gleichbedeutend ist mit "fehlerfrei".
quelle
Sie sollten über Leistung nachdenken, sobald Sie wissen, was "gute" Leistung ist. Mit anderen Worten, es wäre falsch, sich Gedanken über die Leistung zu machen, bevor Sie die folgenden Schwellenwerte ermittelt haben:
Sobald Sie diese Schwellenwerte ermittelt haben, haben Sie auch die Metrik ermittelt, mit der Sie die Leistung messen. Das bedeutet, dass Sie einige automatisierte Leistungstests einrichten können, die Sie mehrmals täglich ausführen können. Das wird dir sagen, ob es dir besser oder schlechter geht.
Um diese Metriken zu ermitteln, müssen Sie wissen, was Ihr System tun muss. Werden beispielsweise absolute Leistungsmetriken (Antwort innerhalb der X-Zeit) oder Durchsatzmessungen (X Antworten pro Y-Zeit) benötigt? Durchsatz- und absolute Zeitoptimierungen erfordern unterschiedliche Ansätze. Wenn Sie nicht genau wissen, worauf es ankommt, optimieren Sie möglicherweise falsch.
quelle
Sie haben wahrscheinlich gehört, dass vorzeitige Optimierung die Wurzel allen Übels ist. Die Frage ist, was macht es verfrüht? Meiner Meinung nach ist es nie eine schlechte Idee, über Leistung nachzudenken, aber sorgen Sie sich nicht übermäßig, bis Ihr Code funktioniert. Sobald es funktioniert, führen Sie einige Tests mit hoher Last durch, profilieren und identifizieren Sie Engpässe und optimieren Sie Ihre Leistung.
That being said, es mit dem Denken über die Leistung während der ersten Codierstufe nichts falsch ist , wenn Sie wissen , bestimmte Techniken , die einen wirklichen Unterschied machen. Wenn Sie beispielsweise eine Speicherstruktur aus einer Bibliothek einer anderen vorziehen, haben Sie in der Vergangenheit festgestellt, dass eine davon schneller ist und weniger RAM als die andere benötigt. Oder in einem Gebäude einfach (man kann es machen anspruchsvollere , wenn spätere Tests erfordern) Caching - System für Daten , dass Sie wissen ,wird viel zugegriffen und wäre viel besser zwischengespeichert. Auf diese Weise ärgern Sie sich nicht zu sehr über die Leistung (zumindest nicht anfangs), sondern verwenden Tipps und Tricks, die Sie auf dem Weg durch andere Projekte gelernt haben. Versuchen Sie, diese einfach zu halten, damit sie bei der ersten Entwicklung leicht berücksichtigt werden können, und bieten Sie möglicherweise auch einige Vorteile.
quelle
Die Leistung sollte in den system- und benutzerbezogenen Spezifikationen Ihres Anforderungsdokuments aufgeführt sein. Ich kenne viele Leute, die sich über die Idee lustig machen, eine Anforderungsanalyse bei der Entwicklung einer Anwendung durchzuführen. Erstaunlicherweise gibt ein solches Dokument eine präzise Antwort darauf, wofür und wo Sie Ihre leistungsbezogenen Ressourcen verwenden sollten, wenn die Anwendung fast fertig ist. Und es wird diese Frage rechtzeitig beantworten
Die Dokumentation der Anforderungen erspart Ihnen Hunderte von Stunden Zeit, die sonst für nicht wesentliche Prozesse verschwendet würden.
quelle
Ein ausgewogener Ansatz wäre besser. Leistung ist wichtig, aber nicht so wichtig wie das Erledigen von Aufgaben.
Dies ist meine übliche Herangehensweise an Leistung und Funktionalität. Im Allgemeinen hängt alles davon ab, was das Programm tut und ob es erforderlich ist, die Funktionsweise zu verbessern und wie viel Zeit es mich kosten würde.
Lassen Sie uns über eine Q & A-Website wie diese nachdenken. Ich denke, diejenigen, die dahinter stecken, haben sicherlich viel darüber nachgedacht, wie man das Stellen einer Frage und das Erhalten der Antwort so zeit- und kosteneffizient wie möglich macht. Wenn Sie jedoch über Benachrichtigungen nachdenken, spielt es keine Rolle, ob hin und wieder Benachrichtigungen angezeigt werden und Sie darüber informiert werden, dass eine neue Antwort oder etwas anderes vorliegt.
quelle
Es gibt eine Möglichkeit, die Leistung sicher zu verschieben: Verwenden Sie nach Möglichkeit domänenspezifische Sprachen.
Wenn der größte Teil Ihrer Entwicklung mit Ihren eigenen kleinen DSLs durchgeführt werden kann und diese gut genug entworfen sind, um Ihre Problemdomäne in der allgemeinsten und allgemeinsten Form auszudrücken, ist es möglich, zuerst einen funktionierenden Prototyp zu erhalten, ohne jemals darüber nachzudenken Leistung, und verbessern Sie dann nur Ihre DSLs-Implementierungen, nicht den eigentlichen Problemdomänencode.
Auch aus Sicht der Wartbarkeit ist dies ein viel besserer Ansatz.
quelle
Sie sollten die Leistung berücksichtigen. Sie müssen jedoch eine Linie ziehen, um das Ende der Abstimmung zu markieren, da (normalerweise) Ihre Zeit wichtiger ist als die des Computers.
Ein wirklich guter Textartikel zur Performance ist: The Computer Performance Shell Game .
quelle
Der "beste" Weg ist ein sehr belasteter Begriff, und die Antwort kann in hohem Maße von Faktoren abhängen, die erst zur Laufzeit bekannt sind.
Die Liste geht weiter und weiter.
Was Sie können tun, ist „die einfachste Sache , die möglicherweise Arbeit könnte“ zu schreiben , von dem Wissen , das Sie derzeit tun haben, und es in einer tut modulare Art und Weise , so dass Sie leicht reorganisieren , wenn Sie mehr wissen. Beachten Sie, dass das "Einfachste" nicht unbedingt einfach ist!
quelle
Es ist immer etwas, woran Sie denken sollten. Ich denke, die meisten Leute versuchen zu sagen, dass es nicht sinnvoll ist, zwei Tage damit zu verbringen, etwas zu optimieren, von dem Sie nicht einmal wissen, dass es kaputt ist. Sobald Sie ein Produkt zum Laufen haben und einige Usability-Tests durchführen können, sollte dies Ihnen zeigen, wo Sie Leistungsprobleme haben. Sobald Sie die tatsächlichen Leistungsprobleme identifiziert haben, können Sie gezielt die Optimierungen vornehmen, die Sie durchführen müssen.
quelle
Zumindest theoretisch sollten Sie sich Gedanken über die Leistung machen, wenn Sie sich im Beta-Test befinden und nicht vorher.
Dies ist jedoch keine Lizenz, um schlechte Designentscheidungen zu treffen. Die Verwendung einer NVARCHAR-Zeichenfolge als Primärschlüssel ist beispielsweise ein sicherer Weg zu einer schlechten Leistung. das heißt, es ist eine schmutzige Angewohnheit, unabhängig von den Leistungsproblemen, und Sie sollten nicht in erster Linie verwenden.
Wenn Ihr Design herkömmlichen Best Practices folgt (alles in der 3. normalen Form, korrekte Informationen, die sich in Ihren Klassen verbergen, minimale Verwendung von Singletons usw.) und später ein Leistungsproblem auftritt, ist es einfach zu handhaben (erstellen Sie hier einen Index, dort einen Cache implementieren).
HTH
quelle
Es hängt davon ab, ob. Beachten Sie die 80/20-Regel: Der Großteil (sagen wir mal 80%) des Codes in der Anwendung wird nie oft genug ausgeführt, um die Leistung spürbar zu verbessern. Sie müssen sich auf die verbleibenden 20% konzentrieren, bei denen die App etwa 80% ihrer Ausführungszeit benötigt.
Möglicherweise können Sie einige der offensichtlichen Leistungsschwerpunkte im Voraus identifizieren , z. B. wenn Sie wissen, dass eine bestimmte Berechnung millionenfach wiederholt wird. In solchen Fällen lohnt es sich auf jeden Fall, über eine Optimierung im Vorfeld nachzudenken, indem die richtigen Datenstrukturen und Algorithmen für den Job ausgewählt werden.
Diese Optimierung ist jedoch eher eine Entwurfsaktivität. Was in der Regel wertlos ist, sind Mikrooptimierungen, bei denen jemand übermäßig viel Zeit mit cleveren Tricks im Namen des "Leistungszuwachses" verbringt. Insbesondere, wenn vorher und nachher keine entsprechenden Messungen durchgeführt wurden, können solche Änderungen keinen Unterschied machen oder die App unter realen Umständen verlangsamen.
quelle
Es hängt davon ab, in welcher Entwicklungsphase Sie sich befinden
1) Wenn Sie die Funktionalität Ihrer Software aufbauen, stellen Sie sicher, dass diese einwandfrei (dh erwünscht und effizient) funktioniert.
2) Sobald die Bausteine integriert sind, erhalten Sie einen Hinweis auf Resource Hogger. Dort haben Sie Raum für Optimierungen.
quelle
Wenn Sie anfangen müssen , über Leistung nachzudenken, sind Sie in Schwierigkeiten. Sie sollten die ganze Zeit über Leistung nachdenken. Tatsächlich vermute ich, dass gute Programmierer über Leistung nachdenken werden, auch wenn sie dies nicht beabsichtigt hatten, in einer Art und Weise, dass Männer alle sieben Sekunden über Sex nachdenken.
Was wichtig ist, ist, welche Maßnahmen Sie basierend auf all diesen Überlegungen ergreifen werden. Gedanken sind billig, aber Aktionen können Code brechen und Fristen sprengen.
In den meisten Fällen ist es nur sinnvoll, nichts zu tun: Sie haben festgestellt, dass Ihr Code nicht häufig genug aufgerufen wird, damit Leistungsprobleme erkennbar sind - möglicherweise handelt es sich um einen Startcode, der einmal pro Computer ausgeführt wird 1% Ihrer potenziellen Benutzerbasis. Möglicherweise handelt es sich um ein kleines Stück redundanten Servercodes, der in einem Meer langsamer Datenbankzugriffe untergeht. Möglicherweise handelt es sich nur um eine ganzzahlige Zuweisung in einem unkritischen Codeabschnitt.
Sehr oft vermuten Sie, dass ein bestimmter Vorgang ein Leistungsproblem verursacht, das durch eine einfache Änderung behoben werden kann. Es gibt zum Beispiel das quälende Gefühl, bei jeder Anfrage eine komplexe SQL-Abfrage auszuführen oder zweimal nach denselben Daten aus einem Wörterbuch zu fragen. Hier ist das Wissen über Optimierungstechniken von Vorteil, und vielleicht passiert die überraschendste Schlussfolgerung:
Wenn Sie eine schnelle Technik kennen, die mit ziemlicher Sicherheit die Leistung eines Codeteils verbessert, tun Sie dies nicht.
Wenn Sie jetzt daran denken können, können Sie es sicher in fünf Minuten später tun. Wenn Sie den Code aus dem Code heraushalten (aber möglicherweise in einem
// TODO
Kommentar), wird der Code bereinigt und Sie sparen Zeit, um an einer anderen Funktion zu arbeiten, und es wird keine Zeit verschwendet, wenn Sie den Code später wegwerfen. Wenn sich herausstellt, dass der ursprüngliche Code beim Testen zu Leistungsproblemen führt, wenden Sie Ihre schnelle Technik an.Ich sage hier nicht, dass Sie vermeiden sollten, Code zu schreiben, der idiomatisch ist, nur weil er zufällig schneller ist. Schreiben Sie idiomatischen Code nach bewährten Methoden, die die Produktivität und Lesbarkeit verbessern und Fehler reduzieren. Es ist nur so, dass Sie sich immer für Lesbarkeit anstatt für Geschwindigkeit entscheiden, wenn Sie die Wahl zwischen idiomatischem Code nach dem Vorbild und einer schnelleren, aber einfach zu beschreibenden Alternative haben.
Die einzige schwierige Situation besteht darin, dass es scheinbar keinen einfachen Weg gibt, die Code-Performance zu verbessern, und es dennoch schmerzlich offensichtlich ist, dass ein Teil des Codes sofort nach seiner Bereitstellung kaputt geht - eine vollständige Datenbanküberquerung bei jedem Klick, hundert SQL-Anforderungen pro Seite auf der Website oder etwas ähnlich Schreckliches. Hier müssen Sie tatsächlich anhalten und noch etwas nachdenken. Dies sind normalerweise Architekturprobleme, die ohnehin nicht lokal gelöst werden können. Bestätigen Sie Ihre Vermutungen mit einem kurzen Impuls oder einem Prototyp, suchen Sie nach ähnlichen Erfahrungen und gemeinsamen Lösungen und erwägen Sie entweder eine Änderung der Architektur oder einen Rückgang der Funktionen.
quelle
IMHO ist es wichtig, über die Leistung nachzudenken, bevor Sie das System implementieren, aber nur darüber nachzudenken. Sie sollten die Anwendung analysieren und mögliche Leistungsengpässe ermitteln.
Dann implementieren Sie das System so einfach wie möglich. Wenn Leistungsprobleme auftreten, optimieren Sie.
Angenommen, Sie haben einen GUI-Client, der Daten über einen Dienst (SOAP, REST-HTTP usw.) abruft. Das Wichtigste für eine hohe Leistung / Skalierbarkeit ist dann, dass so wenig Anrufe wie möglich getätigt werden und bei jedem Anruf eine Menge Daten zurückgegeben werden, anstatt dass bei vielen Anrufen jeweils eine kleine Information zurückgegeben wird.
Bei der Implementierung eines solchen Systems ist mir die Anzahl der Anrufe zwischen den Systemen nicht so wichtig. Aber ich würde sicherstellen, dass die Codebasis es mir leicht machen würde, neu zu faktorisieren / zu optimieren, wenn die Bedürfnisse auftauchen.
quelle
Sie sollten von Anfang an sehr allgemein über Leistung nachdenken. Sie sollten Datenstrukturen und Algorithmen auswählen, die für Ihre Anwendung gut funktionieren und einigermaßen effizient sind. Algorithmen sind von grundlegender Bedeutung für die Software und Datenstrukturen. Sie müssen wahrscheinlich größere Änderungen vornehmen, wenn Sie größere Änderungen vornehmen müssen, während kleinere Details einfacher umgeschrieben werden können.
Möglicherweise möchten Sie auch effiziente Gewohnheiten erlernen, die jedoch von der Sprache abhängen. In C ++ beispielsweise "++ i;" als eigenständige Anweisung oder Ausdruck ist immer mindestens so gut wie "i ++;" und könnte möglicherweise viel effizienter sein. In den meisten Fällen sollten Sie jedoch klaren Code schreiben und dem Compiler vertrauen. Die Gewohnheit, sich Gedanken über Mikroeffizienzen zu machen, wird mit ziemlicher Sicherheit mehr Probleme verursachen als lösen. Für Desktop - Anwendungen, entweder der Compiler ist mindestens so intelligent wie Sie über Dinge wie sind
i >> 1
gegeni / 2
, oder die beste Art und Weise zur Verbesserung der Leistung ist es, einen besseren Compiler zu bekommen, also keine Sorge darüber.Machen Sie sich darüber hinaus keine Sorgen, bis Sie etwas haben, das Sie testen können. Zu diesem Zeitpunkt können Sie das Programm profilieren, um festzustellen, wo sich die Hotspots befinden, und erhalten möglicherweise eine Vorstellung davon, ob Sie ein Performance-Programm haben oder nicht. Wenn Sie die Leistung verbessern möchten, ermitteln Sie, wo das Programm die meiste Zeit verbringt, und verbessern Sie die dortigen Aspekte. Wenn Sie eine angemessene globale Effizienz entwickelt und das Programm gut geschrieben haben, ändern Sie nur einen relativ kleinen Teil des Programms.
quelle
Ich denke, das Beste, was Sie tun können, ist, gute Designpraktiken zu befolgen (z. B. Dinge, von denen Sie wissen, dass sie die Leistung beeinträchtigen), bis Sie etwas zum Laufen bringen. Wenn Sie die Verbesserung nicht messen können, können Sie auch keine Verbesserung erzielen. Sobald Sie etwas haben, mit dem Sie testen können, ist es oft eine gute Idee, einen Profilierungslauf durchzuführen und eine Vorstellung davon zu bekommen, wo sich die Hotspots (falls vorhanden) befinden. Wenn Ihnen etwas auffällt, sollten Sie in Betracht ziehen, den Problembereich umzugestalten oder neu zu schreiben, aber wenn es nicht so schlimm ist (nur weil der Code 90% seiner Zeit mit zwei oder drei Methoden verbringt, hat dies keine Bedeutung, wenn die Gesamtleistung angemessen ist). dann einfach weiterentwickeln. Etwas, das ich mehr als einmal gesehen habe, sind Entwickler, die Tage damit verbringen, den komplexesten Teil des Systems zu optimieren.
quelle
Wann sollte ich darüber nachdenken? Wie viel Aufwand sollte ich investieren? Das hängt von der Cockburn-Skala des Projekts ab. (Mit anderen Worten, wie hoch ist das Risiko, keine gute Leistung zu erbringen?)
Erlernen Sie die Grundlagen frühzeitig (siehe Antwort von Robert Harvey ). Um leistungsorientiertes Denken in verschiedenen Phasen der Softwareentwicklung anzuwenden, muss der Entwickler es genau kennen, damit der Denkprozess nicht durch diese zusätzlichen Überlegungen behindert wird. (Mit anderen Worten, denken Sie über die Leistung nach, bevor das Projekt konzipiert wird.)
Setzen Sie in der frühen Entwicklungsphase die Tools zur Leistungsprofilerstellung großzügig ein und verfolgen Sie den Verlauf der Statistiken. Achten Sie besonders auf die Organisation solcher Informationen, damit sie für spätere Entscheidungen nützlich sind.
Abhängig von der Art Ihres Projekts und der Cockburn-Skala:
Rapid Prototyping oder "Code loswerden, als gäbe es kein Morgen" oder Eigenentwicklung mit geringen geschäftlichen Auswirkungen: Behalten Sie einfach die Statistiken. Denken Sie noch nicht an die Leistung. Implementieren Sie die Funktion auf einfachste Weise. Halten Sie sich an den ersten Algorithmus, der Ihnen in den Sinn kommt.
Desktop-Anwendungen, für die ein konsistenter, umfassender Leistungsansatz erforderlich ist. Es muss nicht stark optimiert werden; Es sollte jedoch so wenig "Hangs" (Nichtreagierbarkeit) wie möglich geben.
High Performance Computing, bei dem die Hardware optimal genutzt werden muss.
quelle
Am Anfang. Identifizieren Sie die erforderlichen Leistungsmerkmale. Wenn Sie das Ziel nicht identifizieren können, müssen Sie entweder einen Schritt zurücktreten, um Ihre Anforderungen besser zu verstehen, oder aufschieben, bis Sie Ihre Komponentenanforderungen mit dem Risiko kennen, das Sie möglicherweise umschreiben. Dann testen. Nicht optimieren, testen. Wenn Ihr Code den Leistungstest nicht besteht, optimieren Sie. Wenn ein Test-Framework vorhanden ist, sollte die Verwendung vorhandener Tools zur Leistungsüberwachung die Aufgabe relativ einfach machen.
Halten Sie die Leistungstests während der gesamten Projektlaufzeit als Regressionstest an Ort und Stelle. Der Wartungscode ist dafür berüchtigt, Leistungsprobleme auszulösen, da die 'Korrekturen' häufig einen sehr engen Fokus haben.
quelle
Ich verlasse mich immer auf eine einfache Formel:
... in dieser Reihenfolge.
Nach c2 wird diese Formulierung Kent Beck zugeschrieben .
quelle