30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

100 5. Funktionen<br />

Wenden wir uns aber jetzt der objektiven Performance zu, denn diese<br />

ist e<strong>in</strong>erseits wichtiger, andererseits schwerer zu beherrschen, wenn man<br />

nicht sauber arbeitet. Insbesondere wirken sich hier Designfehler extrem aus!<br />

Falsch gewählte Datenstrukturen, die nicht für das zu lösende Problem geeignet<br />

s<strong>in</strong>d, s<strong>in</strong>d die ultimativen Killer. Genauso verhält es sich mit verworrenen<br />

Programmen, die nur so vor Seiteneffekten strotzen. In diesen werden z.B.<br />

dieselben Abfragen immer wieder durchgeführt, weil man sich nie sicher se<strong>in</strong><br />

kann, ob sich seit der letzten Abfrage vielleicht nicht doch etwas “h<strong>in</strong>ten<br />

herum” geändert hat.<br />

Um jetzt nicht gleich e<strong>in</strong> ganzes Buch zum Thema Optimierung zu schreiben,<br />

will ich nur e<strong>in</strong> paar Aspekte anführen, die man im H<strong>in</strong>terkopf behalten<br />

sollte:<br />

• Der wichtigste Punkt bei der Optimierung ist, dass man niemals im Widerspruch<br />

zu den Grundregeln e<strong>in</strong>er sauberen, <strong>in</strong>tuitiven, wartbaren, erweiterbaren<br />

und modularen Softwarearchitektur stehen darf. Nur zu oft<br />

sieht man, dass Programme so lange “mit der Brechstange” optimiert werden,<br />

bis sich im Code niemand mehr auskennt. Bei der nächsten Änderung<br />

macht sich große Verzweiflung breit und vor lauter Seiteneffekten hat man<br />

das Resultat, das bereits zuvor angesprochen wurde: Die Software wird<br />

immer langsamer!<br />

• E<strong>in</strong> altbekanntes Faktum bei der Optimierung ist, dass Speicherbedarfsund<br />

Rechenzeitoptimierung nur allzu oft im Widerspruch zue<strong>in</strong>ander stehen.<br />

Es ist niemandem geholfen, wenn e<strong>in</strong> Programm e<strong>in</strong> wenig schneller<br />

wird, sich aber dafür als enormer Speicherfresser bemerkbar macht. Durch<br />

die Wahl geeigneter Datenstrukturen kann man allerd<strong>in</strong>gs e<strong>in</strong>e gute Balance<br />

herstellen.<br />

• Bevor man überhaupt den Code angreift, um etwas zu optimieren, ist<br />

es notwendig zu wissen, was man eigentlich optimiert. Oftmals wird der<br />

Fehler gemacht, Programmteile auf Geschw<strong>in</strong>digkeit zu optimieren, die so<br />

selten aufgerufen werden, dass sie nur e<strong>in</strong>en sehr kle<strong>in</strong>en Bruchteil der<br />

Gesamtrechenzeit benötigen. Damit hat man dann zwar sehr viel Arbeit<br />

<strong>in</strong>vestiert, nur der Erfolg lässt zu wünschen übrig. Es ist unbed<strong>in</strong>gt<br />

notwendig, e<strong>in</strong>en objektiven Test durchführen, um herauszuf<strong>in</strong>den, welche<br />

Vorgänge im Programm <strong>in</strong>sgesamt am meisten Laufzeit <strong>in</strong> Anspruch nehmen.<br />

Zumeist ist es so, dass zwischen 70% und 90% der Laufzeit von e<strong>in</strong>er<br />

Handvoll Funktionen verbraucht werden, weil diese e<strong>in</strong>fach so oft aufgerufen<br />

werden. Optimiert man an der richtigen Stelle, hat man auch schon<br />

mit kle<strong>in</strong>en Verbesserungen e<strong>in</strong>e relativ große Steigerung der Gesamtperformance<br />

erreicht.<br />

• Am allerwichtigsten überhaupt ist es, die <strong>in</strong>sgesamt ausgeführte Codemenge<br />

kurz zu halten. Dies kann man nur durch Wahl der geeigneten<br />

Datenstrukturen und Algorithmen erreichen. Gerade hierbei werden die<br />

gravierendsten Fehler gemacht, denn oft wird um wenige Zeilen Code ge-

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!