![]() |
AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
Mich wundert, dass noch kein Profiler angesprochen wurde. Es gibt Tools, die analysieren welcher Teil des Codes wie lange benötigt. Daraus kann man dann ableiten wo man optimieren sollte, wenn möglich.
Die wirklich guten Profiler sind nicht gerade billig, aber dieser hier ist für den Anfang ganz gut: ![]() Quelltext: ![]() |
AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
Zitat:
Delphi-Quellcode:
und
ListBox.Items.BeginUpdate
Delphi-Quellcode:
einwerfen, was sich auf das Neuzeichnen von grafischen Komponenten bezieht.
ListBox.Items.EndUpdate
Zitat:
... Okay, offenbar gibt es gute Videos auf z.B. YouTube, die das gut erklären (siehe unten). Zitat:
Zitat:
Delphi-Quellcode:
, womit ich nur auf einen Farbkanal (Rot) eines Pixel zugreife, wenn ich mich nicht irre. Als ich das durch
Image.Colors[X, Y].Red
Delphi-Quellcode:
ersetzt hatte, war es deutlich schneller, auch wenn ich nicht weiß, warum es an sich schneller ist.
ScanLine
Auszug aus einem Wikipedia-Artikel zum Thema "Overhead": Zitat:
Zitat:
![]() Solche Sachen wären auch interessant zu wissen. Aber da es auch mitunter von der Programmiersprache abhängt (Aussage aus dem Video), kann man das nicht so sagen, das Addieren schneller als Multiplizieren ist. Das wäre dann in etwa gleichzusetzen mit der Problematik oben zu
Delphi-Quellcode:
und
Inc()
Delphi-Quellcode:
.
i := i + 1
Wenn ich asymptotische Laufzeit richtig verstanden habe, bedeutet das, dass man grob sagen kann, wie die Laufzeit wäre (z.B linear oder quadratisch), aber nicht exakt bestimmen kann, wie der exakte Verlauf der Kurve ist, richtig? Zitat:
Zitat:
Zitat:
Bei der Speicherreservierung (Allokation) bspw. für dynamische Arrays habe ich gelesen, dass es sinnvoll ist, wenn, sobald man mehr Elemente eines solchen Arrays hinzufügen möchte, die Länge des Arrays jeweils verdoppelt. Artikel dazu: ![]() Zitat:
Auch hatte ich mal aufgeschnappt, dass das Arbeiten mit Pointern die Laufzeiten auch verbessern können. Ob das stimmt, weiß ich nicht. Ich wüsste auch nicht, wie da der Zusammenhang wäre. @jaenicke Das werde ich mir mal ansehen, auch wenn vielleicht nicht für Delphi sondern für Lazarus. Für Lazarus gibt es wohl auch solch Profiler. ( ![]() |
AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
Scanline zu verwenden ist schonmal ein guter Ansatz, allerdings ist auch jeder Scanline-Aufruf ziemlich langsam (zumindest in Delphi, keine Ahnung, ob das bei Lazarus auch so ist). Da lohnt es sich, die einzelnen Zeilen selbst per Pointer-Artithmetik zu ermitteln.
|
AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
Bei so kleinen Schleifen, die sehr oft schnell durchlaufen werden, funktionieren die Profiler auch nicht unbedingt sehr gut,
aber ansonsten sind die schon ganz praktisch. Bezüglich Scanline: Man kann das auch einmal am Anfang in ein Array auslesen oder nur den Anfang (eigentlich das Ende) sich holen, in einen Pointer, und dann Zeilen/Spalten entsprechend daraus berechen. |
AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
Zitat:
|
AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
Zitat:
Dank des Internets sind da draußen umglaubliche massen an Beispielen wie man dies oder jenes Problem angehen kann, und selber experimentieren ist schon immer der beste Weg gewesen etwas neues zu erfinden. |
AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
Zitat:
Natürlich muss es
Delphi-Quellcode:
heißen:pale:
z := x * x - y * y + 2 * a; // x² - y² + 2a
|
AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
Zitat:
Delphi-Quellcode:
besser
2*a
Delphi-Quellcode:
schreibt...:-D
a + a
Gruß, Adreas |
AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
Beim Integer ist Mal schneller, weil ja "nur" ein Shift.
Aber hätte gedacht, dass es beim Float auch zutrifft. |
AW: Möglichkeiten Code zu optimieren (z.B. Laufzeit verringern)
Ich bin hier auf diese Seite gestoßen, die sich mit Optimierung von Code befasst.
Link: ![]() Was sind eure Meinungen dazu? Vielleicht könnte man auf jeden einzelnen Punkt davon eingehen und näher erläutern, sofern das nicht auf der Seite selbst geschehen ist. Möglicherweise könnte man diese Liste eben auch erweitern. Nachtrag: In einem Artikel zu Fast direct pixel gibt es einen Punkt zu Pointer. Dort steht: Zitat:
![]() Warum ist das Nutzen von Pointer in dem Fall schneller? Das würde sich auf die Implementierungsfrage beziehen, wie oben an dem Beispiel von
Delphi-Quellcode:
.
ScanLine
Könnte man sagen, dass das Nutzen von Pointern in der Regel schneller ist? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz