Wartezeit bei Beenden des Programms
-
Hallo zusammen
Ich habe ein Problem bei meinem aktuellen Projekt, wobei mir hier vielleicht jemand weiterhelfen kann.In dem Programm werden u.a. Logbücher verwaltet und angezeigt. Diese werden bei Anforderung in kodierter und entschlüsselter Form jeweils in Kontainern bzw. Objekten vorgehalten (leider benötige ich zwingend beide Varianten). Um die Performanz zu verbessern, werden diese Objekt erst bei Anforderung erstellt.
Daher kann ich mein Problem relativ gut eingrenzen. Sobald im laufenden Programm ein Logbuch angefordert wurde, dauert das Beenden des Programms sehr lange. Zwar wird sofort die GUI geschlossen, aber die CPU geht auf Volllast und verhart dort einige Zeit.
Ich vermute, dass dort der Speicher für die Logbücher freigegeben wird und die Aufräumarbeit erfolgen. Nur wundert es mich, dass dieses so lange Dauert. Ansich wird der Speicher bei Beenden des Prozesses eh durch WindowsXP wieder freigegeben, aber wenn ich es sauber programmiere (mit löschen aller erstellten Programme), muss ich einige Zeit warten bis das System wieder reagiert.
Hat hier irgendjemand eine Idee, wie ich das Problem lösen bzw. umgehen kann? Leider kann ich dazu keinen Quellcode zeigen, aber das Problem ansich sollte aus meiner Beschreibung klar werden (ansonsten fragt bitte nach).
-
Verwendest Du TThread-Instanzen?
-
Nein, es handelt sich um eine Singlethread-Anwendung (daher ja auch mein Unverständnis).
-
Tja, so ganz ohne Quellcode kann ich Dir nur empfehlen, mal mit dem Debugger zu schauen, ob sich feststellen läßt, was da so lange dauert.
-
Leider ist das nicht so einfach. Mit dem Debugger komme ich nur bis ans Ende des Destruktor meines Hautfensters. Hier werden auch alle Logbücher gelöscht, was aber kaum Zeit benötigt.
Wenn ich dann aber mit dem nächsten Schritt im Debugger den Destruktor verlasse, läuft die CPU auf 100%, was sich erst nach einiger Zeit legt. Gibt es evtl. irgendeine Möglichkeit zu sehen, was da genau gemacht wird (nutze BCB 6)?
Zudem ist es sehr verwunderlich, dass dieses Problem nur auftritt, wenn auch Logbücher verwendet wurden. Nach einem Ablauf ohne diese wird das Programm sauber und schnell beendet.
-
Im Logbuch wird für jeden entschlüsselten Eintrag eine Struktur genutzt, die ein TDateTime und zwölf AnsiStrings beinhaltet. Da es keine Refernezen sind, muss ich diese nicht von Hand löschen.
Kann es sein, dass der BCB beim Aufräumen dieser so lange braucht? Und wenn ja, hat jemand eine Idee, wie ich das Problem lösen bzw. umgehen kann?
-
Das scheint es auch nicht sein zu können, da ich eben einen Fall getestet habe, bei dem das Logbuch nicht entschlüssel wird. Danach dauert das Beenden auch wieder so lange.
Hat irgendjemand eine Idee oder einen Ansatz, wie ich nun bei der Fehlersuche weiterkommen kann?
-
Hallo
Wie schon Joe gesagt hat, ohne Einblick in den Code und das Konzept für uns nur schwer machbar. Schau nach ob du nicht irgendwo Schleifen hast, die sich unter gewissen, unnormalen Umständen niemals beenden? Oder vielleicht einen ungültigen Speicherzugriff, desen Folge aber wegen dem schließenden Programms nicht mehr korrekt angezeigt und verabeitet wird?
Du könntest in die in Frage kommenden Verarbeitungen ja Ausgabe in die Konsole/in extra Dateien einarbeiten, um den Verlauf verfolgen zu können.
bis bald
akari
-
OK, OK, ich glaube ich brauche Wochenende. Es tut mir leid, aber das Problem tritt nur auf, wenn ich Debug und CodeGuard aktiviert habe (welches genau das Problem ist, weiß ich gar nicht. Ist aber auch egal).
Sobald ich eine endgültige Version erstelle und laufen lasse, hat sich das Problem erledigt. Es tut mir sehr leid, dass ich für so einen dummen Fehler hier eure Zeit in Anspruch genommen habe.
Trotzdem euch beiden natürlich meinen Dank, denn so schnell und hilfreich wird hier selten geholfen. Weiter so.