Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Altes Programm mit DP12 kompilert wird sehr langsam (https://www.delphipraxis.net/215252-altes-programm-mit-dp12-kompilert-wird-sehr-langsam.html)

Janek.d 2. Jun 2024 16:20

Altes Programm mit DP12 kompilert wird sehr langsam
 
Habe ein altes, mit Delphi-2007 erstelltes Programm, auf Delphi12 portiert (Unicode Anpassung).
Es werden Daten verarbeitet die über Die serielle Schnittstelle erfasst werden.
Das neue Programm scheint aber viel langsamer zu funktionieren. Habe den Eindruck dass es mit eine sehr niedrige Task-priorität ausgeführt wird.
Gibt es dafür eine Einstellmöglichkeit? Oder hängt es mit was anderes zusammen?

himitsu 2. Jun 2024 16:40

AW: Altes Programm mit DP12 kompilert wird sehr langsam
 
Was die VCL betrifft, haben wir eher das berechtigte Gefühl, dass es schneller läuft.

Hast du die Projektdatei (DPROJ) neu erstellt?
Seit einer Weile sind die Bereichs- und Überlaufprüfungen standardmäßig aktiv, für neue Projekte.

Also bei Berechnungen und Array-Zugriffen schleichen sich nun überall zusätzliche Prüfcodes mit ein.

jaenicke 2. Jun 2024 16:47

AW: Altes Programm mit DP12 kompilert wird sehr langsam
 
Die Frage ist, was genau langsamer ist. Das kann z.B. auch mit unterschiedlichem Timing bei der Threadsynchronisation zu tun haben. Ohne genauer zu wissen, was du in deinem Quelltext machst (wie du die Daten von der seriellen Schnittstelle liest und verarbeitest, ...), lässt sich das schwer beurteilen.

Hast du denn einmal z.B. mit QueryPerformanceCounter oder einem Profiler Tool geschaut, wo sich das Programm langsamer verhält?

TurboMagic 2. Jun 2024 17:28

AW: Altes Programm mit DP12 kompilert wird sehr langsam
 
TStopwatch könnte für Timinguntersuchungen hilfreich sein. Das nutzt m.W. intern QueryPerformanceCounter.

Bernhard Geyer 2. Jun 2024 17:42

AW: Altes Programm mit DP12 kompilert wird sehr langsam
 
Zitat:

Zitat von Janek.d (Beitrag 1537406)
Habe ein altes, mit Delphi-2007 erstelltes Programm, auf Delphi12 portiert (Unicode Anpassung).
Es werden Daten verarbeitet die über Die serielle Schnittstelle erfasst werden.

Wie ist dein Handling der Daten du du hier bekommst?
Legst du die in Strings ab, welche du immer wieder ergänzst/verlängerst?

Delphi-Strings sind seit D2009 Unicodestrings (2 Byte pro Zeichen / UTF-16).
Die Aktionen damit sind definitiv langsamer und wenn man einige Fehler macht erheblich langsamer

himitsu 2. Jun 2024 18:40

AW: Altes Programm mit DP12 kompilert wird sehr langsam
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1537415)
Delphi-Strings sind seit D2009 Unicodestrings (2 Byte pro Zeichen / UTF-16).
Die Aktionen damit sind definitiv langsamer und wenn man einige Fehler macht erheblich langsamer

Über die Jahre wurden so einige Funktionen optimiert.
Vor allem seit FastMM und als große Teile des FastStrings-Projekt ins Delphi übernommen wurden, gab es große Sprünge, in Richtung schnell.

Abgesehn von den 2 Byte, sind aber die Behandlungen von AnsiString und UnicodeString prinzipiell gleich und sind nicht wirklich ein Tempoproblem.
Zu Beginn des Unicode waren aber auch noch die StringCheckings extrem bremsend, aber die wurden schnell wieder entfernt.
Und jetzt eben neu die aktiven Bereichs- und Indexprüfungen, wobei LongStrings (Ansi und Unicode) quasi prinzipiell sowas wie aufgemotzte dynamische Arrays sind.

Janek.d 2. Jun 2024 19:01

AW: Altes Programm mit DP12 kompilert wird sehr langsam
 
Daten von der Schnittstelle werden mit 'ReadFile...' in eine statische Byte-Tabelle geladen und verarbeitet. Grundsätzlich in der Berechnungsroutinen werden statische Strukturen verwendet. Die Sache von Ascii/Unicode waren an andere Stelle anzupassen, die kritische Berechnung wurde praktisch nicht geändert, trotzdem mit der DP12 Kompilat läuft es wie auf einem alten i386...

jaenicke 2. Jun 2024 19:36

AW: Altes Programm mit DP12 kompilert wird sehr langsam
 
Zitat:

Zitat von Janek.d (Beitrag 1537419)
die kritische Berechnung wurde praktisch nicht geändert, trotzdem mit der DP12 Kompilat läuft es wie auf einem alten i386...

Ist denn die Berechnung nach dem Lesen von der Schnittstelle langsam oder das Lesen selbst? Ich tippe eher darauf, dass der Datenfluss aus irgendeinem Grund gestört ist, sprich die Daten nicht reibungslos gelesen und verarbeitet werden. Denn alles andere sollte keinen derart großen Unterschied machen wie es bei dir klingt.

Aber wie gesagt:
Du müsstest schon Teile des Codes zeigen, damit jemand konkret etwas dazu sagen kann. Und du solltest erst einmal messen, wie schnell die Daten gelesen werden und wie lange es dann braucht, bis diese bei der Berechnung ankommen usw., denn Angaben wie "läuft es wie auf einem alten i386" sind sehr subjektiv.

Wird z.B. mit Threads gearbeitet und wenn ja, wie werden diese synchronisiert?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:15 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