AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Programm wird zur Laufzeit immer langsamer
Thema durchsuchen
Ansicht
Themen-Optionen

Programm wird zur Laufzeit immer langsamer

Ein Thema von Jens Hartmann · begonnen am 16. Mär 2009 · letzter Beitrag vom 20. Mär 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#1

Programm wird zur Laufzeit immer langsamer

  Alt 16. Mär 2009, 16:18
Hallo,

ich stell mal hier jetzt ein neues Thema ein, weil ich die Hoffnung habe, das mir hier unter allgemeine Frage vieleicht jemand helfen kann. Ich habe eigendlich die Frage schon mal an einem vorhanden Thread von mir angehangen, aber da es ja eigendlich ein neues Thema ist, verweise ich an dieser Stelle mal auf den alten Thread, und hoffe das mir jemand hier unter dem neuen Thread helfen kann..
Mein alter Thread

Ich habe meine Programm jetzt mit viele Haltepunkten und sonstigen Versuchen geprüft. Leider ohne Großen Erfolg. Es muss irgendwo ein Problem sein, was ich mit Haltepunkten nicht finden kann.

Ich bau über einen Button eine Verbindung zur COM Schnittstelle auf, über die ich Daten empfange. Lass ich mein Programm eine weile laufen, (Daten werden in VST zur anzeige gebracht) merkt man das das Programm langsam geworden ist. Allerdings, kann es nicht sein, das es am belegen des Speichers liegt, da mein PC trotzallem sich normal bedienen lässt.

Erkenne, kann man den Fehler z.B. daran, wenn man das Programm minimiert und wieder maximiert, dauert es ewig, bis das VST neu gezeichnet wird.

Oder, trenne ich die Verbindung zur COM Schnittstelle, ist es das selbe.Der Trennvorgang dauert so lange, das man fast das Gefühl hat, das Programm wäre abgestürtz.

Vieleicht kann mir ja jemand sagen, wo das dran liegen könnte.

Gruß

Jens
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
DMW

Registriert seit: 6. Sep 2006
Ort: Münster
269 Beiträge
 
Delphi XE Professional
 
#2

Re: Programm wird zur Laufzeit immer langsamer

  Alt 17. Mär 2009, 09:15
Wenn du eine dieser Wartephasen hast, kannst du ja mal die Anwendung (vorausgesetzt, sie läuft im Debugger) unterbrechen und den Call-Stack untersuchen.
Oder du könntest das Programm mal in einem Profiler laufen lassen.
Moritz
"Hey, it compiles! Ship it!"
C++Builder Pages
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#3

Re: Programm wird zur Laufzeit immer langsamer

  Alt 17. Mär 2009, 09:35
Zitat von Jens Hartmann:
Erkenne, kann man den Fehler z.B. daran, wenn man das Programm minimiert und wieder maximiert, dauert es ewig, bis das VST neu gezeichnet wird.
Da liegt denke ich mal der Fehler. Wie, wo und wann füllst du die Daten in das VTV? (Wofür soll deine Abkürzung eigentlich stehen?). Und von wievielen Daten reden wir eigentlich?
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Programm wird zur Laufzeit immer langsamer

  Alt 17. Mär 2009, 09:47
Zitat von Daniel G:
(Wofür soll deine Abkürzung eigentlich stehen?).
VST = Virtual String Tree
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#5

Re: Programm wird zur Laufzeit immer langsamer

  Alt 17. Mär 2009, 09:49
Ach so...

Naja, ich geh trotzdem einfach mal davon aus, dass meine Grundaussage stimmt.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Programm wird zur Laufzeit immer langsamer

  Alt 17. Mär 2009, 09:52
Eigentlich ist ja die Idee, dass diese Virtual Controls in ihrer Geschwindigkeit unabhängig sind vom Inhalt.

Evtl. liegt hier ein allgemeiner Denkfehler über das Verhalten von Windows vor. Wenn mein Programm die Auslagerungsdatei nutzt (und damit langsamer wird), weil es zu viel Speicher benötigt, muss das noch nicht zwingend nachteilig für andere Programme sein.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Programm wird zur Laufzeit immer langsamer

  Alt 17. Mär 2009, 11:28
Der Aufruf von "VSTFüllen" im FormCreate ist nicht sehr geschickt.
Wie soll der Anwender wissen was los ist, wenn er nichts sieht?
Vieleicht in den erstmaligen Aufruf von FormActivate verlagern.
Dann die Anzahl der Datensätze ermitteln "select count(id) ..." und einen Fortschrittsanzeige beim Lesen der eigentlichen Daten.

In der Methode TreeViewResult werden einige Tempvariablen benutzt, warum nicht gleich das Datenobjekt nehmen?
Der Insert ist soweit ok, aber gibt es vor dem Insert keine Möglichkeit sich von der Datenbank eine neue ID zu holen?
Dann könnte man sich das Lesen des gerade eingefügten Datensatzes sparen.
Falls die Datenbank nicht diese Möglichkeit bereitstellt, würde ich über den Einsatz von GUID als Primärschlüssel nachdenken.
Die können dann auf dem Client vergeben werden.

Das Select mit anschließendem Last ist an dieser Stelle aber eine Katastrophe.
Hier wird praktisch die gesamte Tabelle gelesen, nur um ein Datenobjekt zu füllen, dessen Inhalt schon bekannt ist.
Einfach ein Select max(ID) ... natürlich in der selben Transaktion wie der Insert würde genügen.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Programm wird zur Laufzeit immer langsamer

  Alt 19. Mär 2009, 16:56
Hallo zusammen,

Danke erstmal für die vielen, vielen antworten. Ich muss leider momentan immer viel arbeiten, und konnte mich bislang noch nicht intensiv mit den anworten befassen. Ich habe sie zwar alle gelesen, nur noch nicht intensiv versucht Sie umzusetzen. Also, bitte nicht glauben ich hätte kein Interesse an Euren antworten.

Gruß Jens

PS. Heute und Morgen Abend, werde ich mich dem Problem mal wieder widmen.
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Programm wird zur Laufzeit immer langsamer

  Alt 20. Mär 2009, 12:46
Hallo zusammen,

hat alles super geklappt. Habe jetzt die gesamte Funktion umgebaut und es scheint zu funtionieren. Werde jetzt mal einen Testlauf bis heute Abend machen, und schauen ob es dann noch funktioniert.

Folgende Lösung, habe ich jetzt um neue Einträge in mein VST einzufügen.

Delphi-Quellcode:
procedure TForm1.TreeViewResult(ParserTreeView: TMyBaseParser);
var
  Daten : TOMB256PLUS;
begin
  QryMB256PLUS.Close;
  QryMB256PLUS.SQL.Text := 'INSERT INTO MB256PLUS'+
      '("LfdNr", "Datum", "Uhrzeit", "Ereignis", "Teilnehmer", "Bereich")'+
      'VALUES(:LfdNr,:Datum,:Uhrzeit,:Ereignis,:Teilnehmer,:Bereich)';

  QryMB256PLUS.ParamByName('LfdNr').AsInteger := ParserTreeView.Entries[0].LfdNr;
  QryMB256PLUS.ParamByName('Datum').AsString := ParserTreeView.Entries[0].Datum;
  QryMB256PLUS.ParamByName('Uhrzeit').AsString := ParserTreeView.Entries[0].Uhrzeit;
  QryMB256PLUS.ParamByName('Ereignis').AsString := ParserTreeView.Entries[0].Ereignis;
  QryMB256PLUS.ParamByName('Teilnehmer').AsString := ParserTreeView.Entries[0].Teilnehmer;
  QryMB256PLUS.ParamByName('Bereich').AsString := ParserTreeView.Entries[0].Bereich;

  QryMB256PLUS.ExecSQL;
  ConMB256PLUS.Commit;

  QRyMB256PLUS.Close;
  QryMB256PLUS.SQL.Text := 'Select Max(ID) As ID From MB256PLUS';
  QryMB256PLUS.Open;

  VST.BeginUpdate;
  Daten := TOMB256PLUS.Create;
  with Daten do
  begin
    Daten.ID := QryMB256PLUS.FieldByName('ID').AsInteger;
    Daten.LfdNr := ParserTreeView.Entries[0].LfdNr;
    Daten.Datum := ParserTreeView.Entries[0].Datum;
    Daten.Uhrzeit := ParserTreeView.Entries[0].Uhrzeit;
    Daten.Ereignis := ParserTreeView.Entries[0].Ereignis;
    Daten.Teilnehmer := ParserTreeView.Entries[0].Teilnehmer;
    Daten.Bereich := ParserTreeView.Entries[0].Bereich;

  end;
  VST.AddChild(nil, Daten);
  VST.ScrollIntoView(VST.GetLast, true);
  VST.EndUpdate;
  QRyMB256PLUS.Close;
  DataMB256plus := '';
end;
Ich hoffe das ist so alle OK.

Ich werde aber auch alle anderen Ideen, die genannt wurden nochmal prüfen, um eventuell noch ein bißchen an Performance zu sparen.

Danke schon mal an alle.

PS: Diese antwort gebe ich auch auf den anderen Thread, Damit auch jeder bescheid weis.
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Programm wird zur Laufzeit immer langsamer

  Alt 20. Mär 2009, 16:15
Die Max(ID) wird nicht in der selben Transaktion gelesen, in der der Datensatz eingefügt wird.
Im Prinzip kann in der Zwischenzeit z.B. auf einem anderen Client ein weiterer Datensatz eingefügt sein, dessen ID jetzt gelesen wird. Auf jeden Fall wird dadurch eine weitere Transaktion gestartet, die aber auch wieder geschlossen werden sollte.
Jede Transaktion, auch wenn nur Daten gelesen werden, so schnell wie möglich schließen.
Transaktionen, die über lange Zeit offen bleiben, belasten den Datenbankserver unnötig.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 +1. Es ist jetzt 15:25 Uhr.
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