Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Exe aufrufen ? (https://www.delphipraxis.net/104101-exe-aufrufen.html)

pronny31 27. Nov 2007 13:18


Exe aufrufen ?
 
Ich habe folgendes Problem :
ich habe eine Software welche nach ca. 1 Tag einen Neustart meines Programms machen soll wobei auch der Speicher aufgräumt werden soll .
Mein Problem ist egal wie ich es mache der Speicher wird nicht aufgeräumt vor dem Neustart !
Nun wenn ich jedoch mein Programm im Taskmanager beende geht alles ohne Probleme und der Speicher wird geleert !
Kann mir jemand sagen warum das so ist ?
Es geht mir hierbei um den Zusammenhang dieser Abläufe.

Larsi 27. Nov 2007 13:20

Re: Exe aufrufen ?
 
du könntest natürlich n zweites programm im hintergrund machen was dann einfach die andere exe nacheinem tag beendet und wieder neustartet!

SirThornberry 27. Nov 2007 13:22

Re: Exe aufrufen ?
 
für mich klingt das als hättest du ein programm mit Speicherleck. Und anstelle nach diesem Leck zu suchen beendest du lieber das Programm und startest es neu? :gruebel:

pronny31 27. Nov 2007 13:59

Re: Exe aufrufen ?
 
Problem ist nur das er den Speicher nicht freigibt und das Programm wieder startet aber der Speicher immer belegt ist !

Nuclear-Ping 27. Nov 2007 14:15

Re: Exe aufrufen ?
 
... und das merkst du woran?

pronny31 27. Nov 2007 14:23

Re: Exe aufrufen ?
 
Im Taskmanager schaue ich nach und sehe das während der Beendigung auch die Auslagerungsdatei nicht weniger wird !
Beende ich es via Taskmanager schrumpft die Auslagerungsdatei wie gewünscht !

TeronG 27. Nov 2007 14:39

Re: Exe aufrufen ?
 
1) Wie beendest du denn dein Programm zur Zeit!?

2)
Zitat:

Zitat von SirThornberry
für mich klingt das als hättest du ein programm mit Speicherleck. Und anstelle nach diesem Leck zu suchen beendest du lieber das Programm und startest es neu? :gruebel:

ähhh :gruebel: DITO :mrgreen:

Nuclear-Ping 27. Nov 2007 14:41

Re: Exe aufrufen ?
 
Ist in meinen Augen kein wirkliches Indiz dafür.
Wenn die Auslagerungsdatei nicht kleiner wird, kann das genauso bedeuten, dass Windows dein Programm wirklich im Speicher hatte und es nicht ausgelagert hat. Die Speicherverwaltung von Windows ist denke ich eine Welt für sich. Und Anhand der Größe der Auslagerungsdatei kann man sowas imho nicht feststellen.

Zitat:

Zitat von TeronG
2)
Zitat:

Zitat von SirThornberry
für mich klingt das als hättest du ein programm mit Speicherleck. Und anstelle nach diesem Leck zu suchen beendest du lieber das Programm und startest es neu? :gruebel:

ähhh :gruebel: DITO :mrgreen:

Yo, klingt für mich auch eher danach ... :gruebel:

pronny31 27. Nov 2007 14:50

Re: Exe aufrufen ?
 
Nein der Hintergrund ist das das ganze an ständig Daten aus einer Datenbank zieht und das der Rechner nach 3 Tagen einfach abschmiert und ich einen Neustart machen muss ! Es muss doch eine Möglichkeit geben ein Programm zu beenden und anschließend im Speicher alles zu leeren .....

pronny31 27. Nov 2007 14:57

Re: Exe aufrufen ?
 
Beendet wird das Programm mit TerminateProcess.....

Nuclear-Ping 27. Nov 2007 15:08

Re: Exe aufrufen ?
 
Und du bist der Ursache, warum er nach "3 Tagen" immer abschmiert, noch nie auf den Grund gegangen?

pronny31 27. Nov 2007 15:22

Re: Exe aufrufen ?
 
Ich lese überall das durch das Beenden eines Programms Speicherlecks wieder gelöscht werden !

Popov 27. Nov 2007 15:23

Re: Exe aufrufen ?
 
Zitat:

Zitat von pronny31
Ich habe folgendes Problem :

Wie groß ist das Programm? Ist das eine richtige Applikation oder eher ein Tool?

Arbeitest du mit Objekten?

Hast du irgendwelche Konstruktionen verwendet wo du mit einem Objekt über mehrere Prozeduren arbeitest? Bei sowas verliert man gelegentlich den Überblick.

Arbeitest zufällig mit Bitmaps? Ich hatte mal ein sonderbares Speicherleck. Ich konnte auch im Taskmanager das Speicherloch sehen, denn das Programm wurde in jeder Sekunde größer. Das Schlimme, ich war mir keiner Schuld bewußt, da ich wußte alles wieder korrekt freigegeben zu haben. Trotzdem habe ich alles nochmal grob Überprüfung und keinen Fehler gefunden. Die Rätsels Lösung, ich war damals etwas faul beim programmieren und benutze oft den Autovervollständiger. Ich war damals so faul, daß ich den sogar beim Free benutzt habe. Objekt, Punkt, STRG+Leerzeichen, FR eingeben, Enter drücken. Das war ein Automatismus beim Autovervollständigen. Im Kopf hatte ich die nötigen Kürzel für vieles. Das Problem ist aber, daß FR und Enter in der Regel Free ergeben, aber nicht bei TBitmap, dort bekommt man FreeImage raus. Bei der groben Suche ist mir das nichtmal aufgefallen. Sogar bei genauen Suche brauchte ich zwei Sekunden bis ich es bemerkt habe. Ich guckte die Zeile an, hatte sofort das Gefühl, daß da irgendetwas nicht stimmt, wußte aber im ersten Moment nicht was. Irgendwie war Free da, aber irgendwas mit der Länge stimmte nicht.

Man kann also auch Speicherlecks haben, auch wenn man sich dessen nicht bewußt ist.

Seit der Zeit habe ich mit übrigens den Autovervollständiger abgewöhnt und benutze den nur noch selten.

Nuclear-Ping 27. Nov 2007 15:36

Re: Exe aufrufen ?
 
Zitat:

Zitat von pronny31
Ich lese überall das durch das Beenden eines Programms Speicherlecks wieder gelöscht werden !

Werden sie auch. Nur das hat rein garnichts mit deiner Auslagerungsdatei zu tun.

Und wenn du Speicherlecks hast, besorg dir FastMM oder MemChk, geh diesen auf den Grund und beseitige sie. ;)

pronny31 27. Nov 2007 15:53

Re: Exe aufrufen ?
 
Ok ich werde versuchen diese Speicherlecks zu finden und sie beseitigen !
Danke für eure Hilfe !

Luckie 27. Nov 2007 16:35

Re: Exe aufrufen ?
 
Zitat:

Zitat von pronny31
Beendet wird das Programm mit TerminateProcess.....

Dazu sage ich mal nichts mehr.

Warum rufst du nicht Close auf?

Mit dem Beenden eines Programmes werden keine Speicherlecks "gelöscht". Ich möchte ja nicht wissen, was wäre, wenn du Arzt wärst: "Sie haben schmerzen? Gut, ich hole schon mal die Todesspritze. Da nach sind alle Schmerzen weg. Ihre Mutter kann ja einen neuen Sohn erzeugen." :wall:

Such das Speicherleck. Hinweise hat dir Popov schon gegeben:
- Reservierter Speicher, der nicht freigegeben wird
- Selbst erstellte Objekte, die nicht frei gegeben werden
- ...

Nuclear-Ping 27. Nov 2007 17:24

Re: Exe aufrufen ?
 
Ich denke er meint, dass das zweite Programm das erste Programm per TerminateProcess "abschießt".

Und Windows räumt afaik den Speicher hinter einem Programm schon auf, wenn es beendet wird.


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