Es gibt leider kein Patentrezept. Außer den ziemlich abgedroschenen Hinweis, dass man so wenig wie möglich machen sollte. Das wiederrum bezieht sich auf 2 Dinde. Jedes mal, wenn man auf Speicher zugreift muss die CPU den Cache bemühen. Im schlimmsten Falle befindet sich der Speicher nicht im Cache und dann muss auch noch der RAM bemüht werden. Deswegen so wenig wie möglich Zugriffe auf den Speicher. Wenn möglich sogar auch nur mit den Registern arbeiten.
Das andere sind normale Befehle. Das richtet sich leider danach was man als minimum voraussetzen möchte. Es gibt immer wieder neuere Befehle die mehr Aktionen auf einen Schlag durchführen können. So zum Beispiel CMOV (Conditional MOV). Dieses wird nur ausgeführt, wenn ein Flag gesetzt ist. Also CMOVG (Greater) ist vergleichbar mit einem JG (Jump Greater) aber halt ein MOV. Und da muss man halt schauen, dass nicht zu viele Befehle ausgeführt werden.
Im übrigen solltest du dich mit der CPU Ansicht vom Delphi anfreunden, wenn noch nicht passiert.
Interessant könnte evtl. das
Fastcode Project sein. Das beschäftigt sich damit einzelne Methoden bis zur perversion zu optimieren. Allerdings kann ich meinen Augen so etwas nur ein Anfang sein. Siehe unten.
Außerdem auch sehr interessant ist
die Seite von Dennis Kjaer Christensen. Auch wenn sie richtig krank aussieht. Dort hat er sich ein paar Methode genommen und hat diese Analysiert und zeigt Schritt für Schritt wie er sie optimiert. Auf jeden Fall wichtig um selber seine Funktionen zu optimieren.
Und das ist eigentlich auch das Wichtigste. Zu erkennen wo sich Flaschenhälse befinden. Den Lerneffekt mal außen vor gelassen. Wenn man hergeht und einfach Methoden nach Assembler umschreibt wird der Geschwindigkeitsvorteil davon eher verhalten sein. Denn um so kleiner die Methoden um so besser bekommt Delphi so etwas meistens auch schon hin. Viel Wichtiger ist sich anzuschauen wo wirklich Zeit verbraten wird. Also mit einem Profiler schauen oder im Code messen wie oft welche Methoden aufgerufen werden und wie viel Zeit diese benötigen. Wenn man das weiß, dann weiß man auch wo genau man einen Hebel ansetzen muss. Es nützt nichts eine Methode von 40 auf 5 ms zu beschleunigen, wenn diese nur 2 Mal aufgerufen wird. Dann lieber die von 2 ms auf 1,5 ms beschleunigen, wenn die 1 Mio Mal aufgerufen wird.
Allerdings kann man nicht gleich zu Begin alles. Also man muss sich auch schon Methoden nehmen die man eigentlich gar nicht optimieren müsste. Aber wenn man von Assembler keine Ahnung hat dann nützt es nichts. Ich weiß zwar teilweise welche Befehle es gibt aber für mich ist auch vieles zu hoch. Und außer zum Lernen oder besonders wichtigen Stellen vermeide ich Assembler auch.
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.