Frage

Was ist mit inlining-Funktionen oder Prozeduren in Delphi (speziell v2010 hier, aber ich hatte das gleiche Problem mit Turbo Delphi)?

Es gibt einige discalimer in der Hilfe zu vielleicht nicht immer die inline-Funktion, weil "bestimmte Kriterien" was auch immer das bedeutet.

Aber ich habe gefunden, dass in der Regel inlining-Funktionen (auch sehr einfach und haben 3 oder 4 Zeilen code) verlangsamt code statt beschleunigt Sie.

Eine tolle Idee wäre, eine compiler-option "inline-alles".I dont care, wenn meine exe wächst um 50% oder so zu bekommen, es arbeitet schneller.

Gibt es eine Möglichkeit, kann ich erzwingen, Delphi wirklich inline-code, auch wenn es nicht entschieden zu werden inlinded durch den compiler?Das würde wirklich helfen.Andernfalls müssen Sie tun "manuelles inlining" ist die Replikation der Zivilprozessordnung in verschiedenen Bereichen des Codes mit Bemerkungen wie "//inlining failed hier, so dass, wenn Sie ändern die nächsten 5 Zeilen, ändern Sie Sie in dem anderen 8 doppelte spots dieser code vorhanden ist."

Alle Tipps hier?

War es hilfreich?

Lösung

Es gibt eine Compiler-Option für die automatische inlining von kurzen Routinen. Im Projekt Optionen, unter Delphi Compiler -> Kompilieren -> Code-Generierung, schalt "Code inlining control" auf Auto. Beachten Sie jedoch, dass dies nur auf einem Release-Build sein sollte, da inlined Code ist schwierig zu debuggen.

Auch sagten Sie, dass Sie nichts dagegen haben Ihr Programm größer zu machen, solange es schneller wird, aber das oft inlining macht es langsamer. Sie sollten sich bewusst sein, dass diese in Zusammenhang stehen könnten. Je größer die kompilierten Code ist, desto mehr Befehlscache verfehlt Sie haben, die Ausführung verlangsamt.

Wenn Sie wirklich wollen Ihr Programm zu beschleunigen, führen Sie es durch einen Profiler. Ich empfehle Sampling Profiler , die frei ist, hergestellt wird mit Delphi-Code (einschließlich 2010) zu arbeiten und doesn‘ t verlangsamen Ihre Ausführung. Es wird Ihnen einen detaillierten Bericht über zeigen, was Code Sie ausführen die meiste Zeit tatsächlich zu verbringen. Sobald Sie haben festgestellt, dass Sie sich auf die Engpässe konzentrieren und versuchen, sie zu optimieren.

Andere Tipps

Inlining kann die Dinge langsamer in einigen Fällen machen. Die inlined Funktion kann die Anzahl der CPU-Register erhöhen für lokale Variablen erforderlich. Wenn nicht genügend Register sind, werden Variablen, die im Speicher statt befinden, das macht es langsamer.

Wenn die Funktion nicht inlined es wird (fast) alle CPU-Register zur Verfügung.

Ich habe festgestellt, das ist es in der Regel keine gute Idee Funktionen Inline-Schleifen enthalten. Sie werden ein paar Variablen verwenden, die im Speicher wahrscheinlich am Ende sind, langsamer der inlined Code zu machen.

Wenn Sie Kraft inlining dann Include-Dateien verwenden. Sie müssen sicherstellen, dass Sie die richtigen Variablen deklarieren, und verwenden Sie dann {$ I filename.inc }. Das wird injiziert immer diese spezifischen Code genau dort, wo Sie es wollen, und macht es leichter zu pflegen, wenn Sie es ändern müssen.

Beachten Sie, dass der Compiler von Menschen so geschrieben ist klüger als die meisten Sterblichen (ich eingeschlossen) und hat Zugang zu mehr Informationen, wenn Inline oder nicht entscheiden, so dass, wenn es keine Inline es wahrscheinlich einen guten Grund hat.

Wenn ich verstanden habe, eine FPC-compiler devels (die hat das gleiche Problem) richtig, inlining kann nur geschehen, wenn die routine zu inline-wurde bereits zusammengestellt.

IOW, wenn Sie das Gerät mit dem inline-zu-sein-Funktionen, die ein "Blatt" Einheit und legen Sie es als erstes in der uses-Klausel Ihres Projekts (.dpr), sollte es ok sein.Beachten Sie, dass mit "Blatt" Einheit, ich meine eine Einheit, die hat keine Abhängigkeit vom anderen Einheiten in das Projekt, also nur auf bereits kompilierte units.

Ich wäre nicht überrascht, es war das gleiche in Delphi, da es Aktien, die ein unit-system basiert auf den gleichen Prinzipien.

Es ist auch ziemlich unbehebbar, ohne gegen separate compilation Prinzipien.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top