Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Programm wird mit Laufzeit immer langsamer (https://www.delphipraxis.net/207338-programm-wird-mit-laufzeit-immer-langsamer.html)

norwegen60 15. Mär 2021 22:18

AW: Programm wird mit Laufzeit immer langsamer
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1485229)
Die Messdaten werden zwar in die Datenbank geschrieben, aber kann es sein, dass da noch irgendwo ein file-basiertes Logging mitläuft, bei dem die Logdatei immer erst gelesen, ergänzt und dann wieder geschrieben wird?

Ja, es werden über nlog Logs geschrieben. Das sind immer 24h Logs. Ich habe mal die Logs löschen lassen. Die beginnen dann wieder bei 0 Datensätzen. Das ändert aber nichts an dem Delay.

Jasocul 16. Mär 2021 06:54

AW: Programm wird mit Laufzeit immer langsamer
 
Das letzte mal, dass ich mit RS232 zu tun hatte, war zu Turbo-Pascal-Zeiten. Mal sehen, ob meine Erinnerungen dazu noch ausreichen, dein Problem einzugrenzen.

Du schreibst, dass alle 5 Sekunden Temperatur, Drehzahl und Status abgefragt werden. Ich nehme an, dass du dafür auch einen Timer verwendest. Wird dort die Verbindung jedesmal neu initialisiert oder greifst du auf eine bestehende Verbindung zu? Im zweiten Fall kann sich der günstige Abfragezeitpunkt ständig verschieben. Wenn ich mich richtig erinnere, kommt von der seriellen Schnittstelle ein Startbit und dann erst die Daten. Wird das Startbit verpasst, musst du warten, bis das nächste Startbit übertragen wird. Im Laufe der Zeit, kann es dann zu Verschiebungen kommen, die zu Wartezeiten führen. Wenn das die Ursache für dein Problem sein sollte, kann eine regelmäßige Initialisierung der Verbindung eine Verbesserung bringen.

Stoppst du den Timer, wenn die Daten abgefragt werden? Das wäre ziemlich wichtig, da der sonst vielleicht mehrfach während einer Abfrage ausgelöst würde. In dem Fall misst du vielleicht gar nicht die richtige Zeit bei der Auslösung des Timers oder es kommt zu anderen Problemen und die Verzögerung ist eine sekundäre Auswirkung.

Laufen auf dem Rechner noch andere Programme oder werden gelegentlich andere Programme dort gestartet? Ich halte es zwar für unwahrscheinlich, aber wenn du Charts und VirtualStringTree verwendest, benötigst du Hauptspeicher. Je nach Umfang, Laufzeit und Nutzung anderer Programme, kann der Hauptspeicher fragmentiert sein. Auch das kann dann zu Verzögerungen führen. Aber ich vermute den Fehler eher an einer anderen Stelle.

TigerLilly 16. Mär 2021 06:59

AW: Programm wird mit Laufzeit immer langsamer
 
Ich würde bei den Methoden auf oberster Ebene, die wiederkehjredn aufgerufen werden, beginnen und deren Laufzeit (Eintritt - Austritt) loggen. Dann hast du einen ersten Anhaltspunkt, wo die Zeit liegen bleibt, ohne allzuviel am Code ändern zu müssen und ohne viel mit Profilern etc herumtun zu müssen. Leg die Info so ab, dass du sie leicht visualisieren kannst. Hantle dich dann weiter in die Tiefe. Versuche, nach dem Ausschlußprinzip vorzugehen - je mehr Methoden du ausschließen kannst, desto besser. Aber: immer messen, nicht vermuten.

HTH

Blup 16. Mär 2021 08:21

AW: Programm wird mit Laufzeit immer langsamer
 
Stichwort Datenbankverbindung
Werden die DB-Transaktionen nach jedem Messvorgang tatsächlich alle geschlossen?
Wenn eine Transaktion über die gesamte Laufzeit des Programms offen bleibt und in der Zwischenzeit tausende von Datensätzen eingefügt werden, bekommt der Datenbankserver ein Problem. Die Beschreibung würde dazu passen.

Jumpy 16. Mär 2021 08:50

AW: Programm wird mit Laufzeit immer langsamer
 
Entsteht die Verzögerung vllt. in der DLL? In einem der Threads wurde eine dazwischen geschaltete DLL erwähnt, deswegen frag ich da nochmal nach?


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz