Autor Beitrag
starsurfer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 334

Win 95, Win 98, Win XP, Win Vista, Linux
D5 Enterprise ,D2005, D6 Personal, Visual C++ Express 2005, C++ Builder 6 E, Dev-C++
BeitragVerfasst: Di 09.10.07 17:36 
Hallo DF´ler,

ich schreibe gerade an einem Programm was Dateien und Programme mittels Shellexecute startet.
Es funktioniert alles prima.
Jedoch wird für jeden Shellexecute Aufruf RAM reserviert (meistens einmalig, zB.: Word starten - 3MB(!),Ordner öffnen - 0,1MB,PNG-Datei öffnen - 0,4 MB) der bis zum Programm Ende nicht wieder frei gegen wird.
Es kommt auch unter Umständen dazu das in meinem Programm ein neuer Thread gestartet wird(laut Taskmanager).
So hat mein Programm am Anfang 5MB RAM Verbrauch und am Ende vll. 12 MB RAM-Verbrauch.

Wieso verbraucht das so enorm viel RAM nur um ein Programm zu starten.
Kann ich was dagegen tun?

mfg
Star

ps.: Wusste nicht ob ich es in Dateizugriff oder in WinAPI schreiben sollte, wenns falsch ist bitte verschieben. :)

_________________
GEIZ IST GEIL! - Ihr Sozialamt
Mitmischer 1703
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Mi 10.10.07 19:14 
Titel: Neustart
Du kannst dein Programm doch neustarten!

Hab ich aus Spaß mal gemacht. Du brauchst nur einen Button (oder du machst es programmintern).



Unter C++ geht das so:



ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
try


        {

                 Form1->Close;

                 Application->Initialize();

                 Application->CreateForm(__classid(TForm1), &Form1);

                 Application->Run();

        }

        catch (Exception &exception)

        {

                 Application->ShowException(&exception);

        }

        catch (...)

        {

                 try

                 {

                         throw Exception("");

                 }

                 catch (Exception &exception)

                 {

                         Application->ShowException(&exception);

                 }

        }




Dann müsste der RAM ja freigegeben sein! Du musst es jetzt nurnoch auf Delphi übertragen :mrgreen:



Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt, passt auch bei C++ ganz gut
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 10.10.07 22:37 
Titel: Re: Neustart
Moin!

user profile iconMitmischer 1703 hat folgendes geschrieben:
Du kannst dein Programm doch neustarten!

Hab ich aus Spaß mal gemacht.
Sorry, aber der Vorschlag und der Code gehören auch eher in die "Spaß"-Kategorie. :? Du kannst ein Programm nicht einfach "neustarten"; jedenfalls nicht, ohne die Prozessstruktur von Windows entsorgen und neu initialisieren zu lassen. Das geht aber nicht innerhalb eines Prozesses :arrow: wenn schon, dann also z.B. mit einer kleinen Batchdatei oder so. :idea:

Abgesehen davon sollte dein Code statt den Speicher "aufzuräumen", weitere Speicherlöcher erzeugen! :shock:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 12.10.07 09:44 
Zum Spielen nimmt man ShellExecute; zum Prozess-Starten CreateProcessExW.

Ansonsten stimm ich Narses zu ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
starsurfer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 334

Win 95, Win 98, Win XP, Win Vista, Linux
D5 Enterprise ,D2005, D6 Personal, Visual C++ Express 2005, C++ Builder 6 E, Dev-C++
BeitragVerfasst: Di 06.11.07 13:40 
CreateProccess schein geholfen zu haben.

Danke :)

_________________
GEIZ IST GEIL! - Ihr Sozialamt