AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Programm wird mit Laufzeit immer langsamer

Ein Thema von norwegen60 · begonnen am 15. Mär 2021 · letzter Beitrag vom 16. Mär 2021
Antwort Antwort
Seite 1 von 3  1 23   
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
428 Beiträge
 
Delphi 10.3 Rio
 
#1

Programm wird mit Laufzeit immer langsamer

  Alt 15. Mär 2021, 12:41
Hallo zusammen,

ich weiß, dass ich hier eine ziemlich offen Frage stelle, aber ich weiß im Moment nicht so recht wo ich ansetzen soll.

Ich habe eine Anwednung die während der Laufzeit per RS232 Daten von einem Gerät abfragt, in die Datenbank schreibt, laufende Messergebnisse in zwei Charts darstellt und ein Teil der Daten in einem VirtualStringTree darstellt.
Nun besteht das Problem, dass die Anwendung nach 2 Tagen Laufzeit 2..3 s benötigt um z.B. nach Klick auf einen Button Daten per RS232 abzufragen. Nach dem Click erscheint die Windows-Sanduhr und 2..3 sec später sieht man die Daten am Splitterkabel, das ich zu Überwachungszwecken an die RS232 gehängt habe. Die Antwortzeit des Geräts selber liegt im ms-Bereich. Nach 4 Tagen Laufzeit sind es schon 5..6 s. Das Öffnen des Explorers geschieht normal. Es ist nur mein Programm, das langsamer wird
  • Alle 5s werden Temperatur, Drehzahl und Status abgefragt.
  • Alle 2 Minuten werden diese in einem Chart dargestellt und in DB geschrieben.
  • Alle 60 Minuten werden 8 Messwerte erfasst. d.h. nach 2 Tagen hat man 48 solcher Messpunkte. Es sind also keine großen Datenmengen, die da anfallen.
  • Zu Testzwecken habe ich den 60 Min-Intervall auf 4Min verringert. D.h. jetzt sind die Messungen nach 4h abgearbeitet => Kein Problem mit der Laufzeit => Es liegt wohl nicht daran, dass die Messpunkte ein Datenloch erzeugen
  • Ich habe die 2 Minuten logs abgeschalten => Nach 2 Tagen ist Anwendung wieder langsam => Es liegt wohl auch nicht am Log der 2-Minuten Daten
  • Ich habe die Darstellung in den Charts deaktiviert => Keine Verbesserung
  • Ich habe den Speicherverlauf geloggt. GetMemSpace erhöht sich nach 2.5 Tagen von 26'100 auf 26'327 kByte und M.dwAvailVirtual verringert sich von 1'582'312 auf 1'576'936 kByte => Erscheint mir auch nicht auffällig

Delphi-Quellcode:
function GetMemSpace: Integer;
// *****************************************************************************************************************************************
// Emittelt den Speicherbedarf der aktuellen Anwendung
var
  State: TMemoryManagerState;
  i: Integer;
begin
  GetMemoryManagerState(State);
  Result := 0;
  for i := 0 to high(State.SmallBlockTypeStates) do
    Inc(Result, State.SmallBlockTypeStates[i].AllocatedBlockCount * State.SmallBlockTypeStates[i].UseableBlockSize);
  Inc(Result, State.TotalAllocatedMediumBlockSize + State.TotalAllocatedLargeBlockSize);
end;
   
    // Alle 10 Minuten loggen (60 x 5s)
    if (Tag = (Tag div 12) * 12) then
    begin
      M.dwLength := SizeOf(M);
      GlobalMemoryStatus(M);
      GetLogger.Debug('MemLog', format('Used Memory = %11.0n / %14.0n kB', [GetMemSpace / 1024, M.dwAvailVirtual / 1024]));
    end;
Jetzt fehlt mir eine Idee was ich noch machen kann, um herauszufinden, warum die Anwendung im Verlauf von Tagen langsamer wird.

Programm ist mit Delphi XE erstellt

Danke für jede Hilfe
Gerd
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
5.716 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Programm wird mit Laufzeit immer langsamer

  Alt 15. Mär 2021, 13:40
Jetzt fehlt mir eine Idee was ich noch machen kann, um herauszufinden, warum die Anwendung im Verlauf von Tagen langsamer wird.
Einen "Profiler" verwenden, denn genau dafür wurden die erfunden. Gib einfach mal "Delphi Profiler" in die Suchmaschine deines Vertrauens ein, es gibt auch mehrere kostenlose Lösungen.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.992 Beiträge
 
Delphi XE4 Professional
 
#3

AW: Programm wird mit Laufzeit immer langsamer

  Alt 15. Mär 2021, 13:47
Hallo,
Zitat:
laufende Messergebnisse in zwei Charts darstellt und ein Teil der Daten in einem VirtualStringTree darstellt.
Dann nimm mal genau diesen Code testweise raus.
Oder stell nur die letzten 100 Mess-Ergebnisse dar.

Zweiter Ansatzpunkt ist die Datenbank.
Wohin speicherst Du die Mess-Ergebnisse?
Erfolgt die GUI-Darstellung nach:
1. neue Daten hintendran
oder
2. GUI verwerfen, alle Daten neu laden und anzeigen
Heiko
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
428 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Programm wird mit Laufzeit immer langsamer

  Alt 15. Mär 2021, 13:50
Einen "Profiler" verwenden, denn genau dafür wurden die erfunden. Gib einfach mal "Delphi Profiler" in die Suchmaschine deines Vertrauens ein, es gibt auch mehrere kostenlose Lösungen.
Ich benutze hin und wieder den MsSQL-Profiler. Habe aber nicht realisiert, dass es sowas "natürlich" auch für die Delphi-Seite gibt.

Danke

Geändert von norwegen60 (15. Mär 2021 um 13:59 Uhr)
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
428 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Programm wird mit Laufzeit immer langsamer

  Alt 15. Mär 2021, 13:53
Dann nimm mal genau diesen Code testweise raus.
Oder stell nur die letzten 100 Mess-Ergebnisse dar.
Ich hatte ja geschrieben, dass ich genau das schon gemacht habe. Temperatur und Drehzahl, wo überhaupt mehr als 100 Messpunkte anfallen, habe ich ganz abgeschalten. Bei den Intervall-Messungen nur die Chartdarstellung. Beides ohne Erfolg.

Ich probiere den Compiler
  Mit Zitat antworten Zitat
WiPhi

Registriert seit: 19. Feb 2015
73 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Programm wird mit Laufzeit immer langsamer

  Alt 15. Mär 2021, 13:56
Wenn du via TCP/IP direkt oder via VPN zugriff auf das System hast, wäre ggf. auch noch Remote-Debugging via PA-Server eine Möglichkeit, die Stelle zu finden, welche den Performance-Einbruch verursacht.
Wer sucht, der findet. Wer länger sucht, findet mehr.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.591 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Programm wird mit Laufzeit immer langsamer

  Alt 15. Mär 2021, 14:50
Von Bei Google suchenAQTime ist beim Delphi eine kostenlose Edition dabei (GetIt), aber nur die etwas kränkliche IDE-Integration.

Die wichtigsten Funktionen loggen/messen kannst auch selber.
GetTickCount, TStopwatch oder Dergleichen.

Beim Befüllen von Komponenten sind so Dinge wie BeginUpdate bzw. DisableControls beachtet?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (15. Mär 2021 um 16:35 Uhr)
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
428 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Programm wird mit Laufzeit immer langsamer

  Alt 15. Mär 2021, 16:22
Von Bei Google suchenAQTime ist beim Delphi eine kostenlose Edition dabei (GetIt), aber nur die etwas kränkliche IDE-Integration.

Die wichtigsten Funktionen loggen/nessen kannst auch selber.
GetTickCount, TStopwatch oder Dergleichen.

Beim Befüllen von Komponenten sind so Dinge wie BeginUpdate bzw. DisableControls beachtet?
Wie gesagt ist es Delphi XE. Da gabs noch kein GetIt. Ich schau mir gerade AsmProfiler und SamplingProfiler an.

BeginUpdate und DisableControls sind beachtet, sollten hier aber kaum eine Rolle spielen, da kaum Daten gemessen werden. Da gibt es andere Methoden wo alle 3 Minuten gemessen wird und das über 1.5 Tagen. Da merkt man kaum was.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.591 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Programm wird mit Laufzeit immer langsamer

  Alt 15. Mär 2021, 16:32
Damals gab es noch das "manuelle" GetIt und die Additional-DVDs

https://edn.embarcadero.com/article/41296
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
TomyN

Registriert seit: 8. Nov 2006
Ort: Bayreuth
108 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Programm wird mit Laufzeit immer langsamer

  Alt 15. Mär 2021, 17:40
Ich würde auf den TVirtualStringList tippen.

'Primitives' Profiling geht auch mit TimeGetTime...
Thomas Neumann
Meine Projekte
www.satlive.audio
www.levelcheck.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 00:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf