Was ist Code-Optimierung?

7

Wenn gesagt wird, dass dieser Code eine Optimierung benötigt oder wie optimiert sein kann, was bedeutet das? Welche Art von Code muss optimiert werden? Wie man Optimierung auf den Code in c # anwendet? Was die Vorteile davon?

    
Abdullah BaMusa 12.02.2009, 06:47
quelle

7 Antworten

15

Optimierung ist ein sehr weiter Begriff. Im Allgemeinen bedeutet dies, das System so zu modifizieren, dass einige seiner Aspekte effizienter arbeiten oder weniger Ressourcen benötigen oder robuster sind. Zum Beispiel kann ein Computerprogramm optimiert werden, so dass es schneller ausgeführt wird oder weniger Speicher oder Plattenspeicher verwendet wird oder in Bezug auf die Benutzeroberfläche reaktionsfähiger ist.

Obwohl "Optimierung" die gleiche Wurzel wie "optimal" hat, erzeugt der Optimierungsprozess kein vollständig optimales System: Es gibt immer einen Kompromiss, so dass nur die Attribute von größtem Interesse optimiert werden.

Und denken Sie daran:

  

Die erste Regel der Programmoptimierung: Tu es nicht. Die zweite Regel der Programmoptimierung (nur für Experten!): Tun Sie es noch nicht. ( Michael A. Jackson )

    
Anton Gogolev 12.02.2009, 07:00
quelle
5

Optimierung ist der Prozess, ein System so zu modifizieren, dass ein Teil davon effizienter arbeitet oder weniger Ressourcen verbraucht werden.

In Ihrem Fall bezieht sich hauptsächlich auf 2 Ebenen:

  

Designlevel

     

Auf der obersten Ebene kann das Design optimiert werden, um die verfügbaren Ressourcen bestmöglich zu nutzen. Die Implementierung dieses Designs wird von einer guten Auswahl an effizienten Algorithmen profitieren und die Implementierung dieser Algorithmen wird von dem Schreiben von Code mit guter Qualität profitieren. Das architektonische Design eines Systems beeinflusst seine Leistung überwiegend. Die Wahl des Algorithmus beeinflusst die Effizienz mehr als jedes andere Element des Designs. In einigen Fällen beruht die Optimierung jedoch auf der Verwendung von schickeren Algorithmen, der Verwendung spezieller Fälle und spezieller Tricks und der Durchführung komplexer Kompromisse. Daher kann ein vollständig optimiertes Programm manchmal, wenn es nicht ausreichend kommentiert wird, für weniger erfahrene Programmierer schwieriger zu verstehen sein und daher mehr Fehler enthalten als nicht optimierte Versionen.

     

Quellcodeebene

     

Die Vermeidung schlechter Codequalität kann auch die Leistung verbessern, indem offensichtliche Verlangsamungen vermieden werden. Danach sind jedoch einige Optimierungen möglich, die die Wartbarkeit verringern; einige, aber nicht alle von ihnen können heutzutage durch die Optimierung von Compilern durchgeführt werden. Zum Beispiel wird oft mehr Umleitung benötigt, um eine Software zu vereinfachen oder zu verbessern, aber diese Umleitung hat ihre Kosten.

    
gimel 12.02.2009 07:27
quelle
3

Die Codeoptimierung beschleunigt den Code. Es gibt zwei Hauptwege, dies zu tun:

1) Drücken Sie mehr Arbeit in weniger Zyklen. Finde heraus, wo der Code eine zusätzliche Kopie macht oder ob es eine Verzweigung in einer engen Schleife gibt. Dies ist im Kleinen optimiert.

2) Ihre Algorithmen besser skalieren. Sie haben vielleicht von "Big O" -Notation gehört. Dies führt dazu, dass ein Algorithmus mit großen Datensätzen viel weniger schnell abnimmt.

Wenn Sie zum Beispiel naiv nach einem Telefonbuch suchen, werden Sie auf Seite 1 beginnen und alle Namen lesen, bis Sie den gesuchten Begriff gefunden haben. Dies erfordert eine Anzahl von Anweisungen, skaliert nach der Anzahl der Namen im Telefonbuch. Wir nennen das O (n). Denken Sie jetzt darüber nach, wie Sie wirklich im Telefonbuch suchen. Du öffnest dich zu einem Ort in der Mitte und siehst, auf welcher Seite der gesuchte Name steht. Dies wird als binäre Suche bezeichnet und skaliert im Logarithmus der Anzahl der Namen. Wir nennen das O (logn). Es ist viel schneller.

Merken Sie sich die erste Regel der Optimierung: Messen Sie zuerst. Viele Menschenjahre wurden damit verbracht, Code zu optimieren, der nicht sehr häufig lief.

    
Steve Rowe 12.02.2009 07:03
quelle
3

Wenn Sie Code-Optimierung durchführen, nehmen Sie einen Messwert für Ihren Code und versuchen ihn effizienter zu machen. Die Metrik bezieht sich normalerweise auf eine knappe Ressource.

Hier sind gängige Metriken

  • Ausführungsgeschwindigkeit (normalerweise die erste, die einem beim Optimieren einfällt)
  • Speicherverbrauch
  • Ausführbare Größe (bei eingebetteten Systemen kann es wichtig sein)
  • Datenbankzugriff
  • Remote-Service-Zugriff (weniger Chatty, Caching ..)
  • Einfachheit, Lesbarkeit, Wartbarkeit des Codes

Nach der Optimierung sollte der Code das gleiche Ergebnis liefern.

Das Problem ist, dass Sie Entscheidungen treffen müssen. Ausführungsgeschwindigkeit kommt oft mit mehr Speicherverbrauch ...

Sie sollten die Optimierung auch global in Betracht ziehen. Ein Gewinn von 10ms in einer Schleife, wenn Sie dann 1000ms auf einen Web-Service warten, ist völlig nutzlos.

    
thinkbeforecoding 12.02.2009 09:16
quelle
1

Um Anton Gogolevs Antwort hinzuzufügen, ist eine bestimmte Leistungsanforderung nicht erfüllt, wenn ein Teil des Codes optimiert werden muss. Wir entwickeln Programme, um die Anforderungen der Benutzer zu erfüllen, richtig? Die meisten Programmierer neigen dazu, weitgehend in Bezug auf funktionale Anforderungen zu denken, dh was das Programm tut, aber die Benutzer werden auch Leistungsanforderungen haben, was die Ressourcenkosten (Netzwerkbandbreite, CPU-Zyklen, Speicher, Speicherplatz, usw.) zur Verfügung stellen die Funktionalität. Optimierung ist der Prozess des Änderns eines Codeabschnitts, um eine bestimmte Leistungsanforderung zu erfüllen. IMHO sollte dies zur Entwurfszeit geschehen, aber Sie werden manchmal ein Stück Code schreiben, nur um festzustellen, dass es nicht leistungsfähig ist. Um den Code zu optimieren, müssen Sie zuerst herausfinden, welche Ressource Sie verwenden. Wenn es CPU-Zyklen oder Speicher ist, kann ein Profiler helfen. Wenn es sich um eine Netzwerkbandbreite handelt, die heutzutage sehr verbreitet ist, müssen Sie ein paar Lasttests und ein Comm-Profiling durchführen.

Mein Rat wäre, dass Sie Ihre aktuellen und voraussichtlichen zukünftigen Leistungsanforderungen immer verstehen, bevor Sie Code schreiben und in der Entwurfsphase optimieren. Späte Optimierung ist teuer, schwierig und versagt häufig oder führt zu hässlichem Code.

    
Shane MacLaughlin 12.02.2009 08:02
quelle
1

Die Optimierung hat zwei Hauptzwecke:

  • Ihre Software benötigt weniger Ressourcen, z. B. schneller laufen, kleiner sein, weniger RAM, weniger Festplattenspeicher beim Ausführen und beim Speichern von Dokumenten, weniger Netzwerkzugriff, ...

  • Sie erhalten Ihre Software durch Refactoring besser wartbar.

Sie müssen nicht optimieren, solange kein ähnliches Problem aufgetreten ist: Es ist weitaus schwieriger, optimierten Code zu debuggen, als den richtigen Code zu optimieren.

    
mouviciel 12.02.2009 09:03
quelle
-3

Es kann beispielsweise sein, dass der Code einen Codeblock hat, der dupliziert wird und in eine Methode eingefügt werden sollte / sollte. Sie könnten veraltete Methoden / Klassen verwenden, da es möglicherweise einfachere Möglichkeiten gibt, den Code zu verwenden Es könnte aber auch etwas aufgeräumt werden (zB Entfernen einer harten Codierung) usw. ...

    
tehvan 12.02.2009 06:55
quelle

Tags und Links