AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi ShellExecute(Prog) frisst Speicher, wie GarbageCollection ?
Thema durchsuchen
Ansicht
Themen-Optionen

ShellExecute(Prog) frisst Speicher, wie GarbageCollection ?

Ein Thema von kalmi01 · begonnen am 30. Apr 2006 · letzter Beitrag vom 14. Mai 2006
Antwort Antwort
kalmi01
(Gast)

n/a Beiträge
 
#1

ShellExecute(Prog) frisst Speicher, wie GarbageCollection ?

  Alt 30. Apr 2006, 16:15
Moin, moin,

ich habe ein Prog, welches eine (sehr) große Menge an Daten konvertieren muss.
Für die Konvertierung muss ich eine Fremdsoftware per ShellExecute aufrufen.
Bei jedem dieser ShellExecute-Aufrufe gehen meinem System aber rund 20KB Speicher verloren.

Ruft mein Prog ein von mir erstelltes Prog mit ShellExecute auf, sieht alles OK aus,
daran kann es also nicht liegen.

Nach dem ShellExecute steht das fremde Prog im Taskmanager nicht mehr drin.
Ich vermute, es alloziiert Speicher, ohne diesen wieder komplett freizugeben.

Gibt es eine Möglichkeit die GarbageCollection für nicht benötigten Speicher aufzurufen ?
Alternativ wäre es für mich auch OK, wenn ich den ShellExecute so kapseln könnte,
das ich mit meinem eigenen Prog den Speicher wieder freigebe.

Es sind wirklich sehr viel Daten zu wandeln und ich habe keinen Bock,
eine Woche lang im Stunden-Takt den Rechenknecht zu rebooten.

Jede noch so verwegene Idee, meinen Speicher sauber zu halten, ist also sehr willkommen !
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#2

Re: ShellExecute(Prog) frisst Speicher, wie GarbageCollectio

  Alt 14. Mai 2006, 12:50
Welches Betriebssystem?
  Mit Zitat antworten Zitat
kalmi01
(Gast)

n/a Beiträge
 
#3

Re: ShellExecute(Prog) frisst Speicher, wie GarbageCollectio

  Alt 14. Mai 2006, 14:53
Hallo Olli,

Windows XP + SP2
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#4

Re: ShellExecute(Prog) frisst Speicher, wie GarbageCollectio

  Alt 14. Mai 2006, 15:09
Okay, dann dürften die 20kB vom System allozierte Seiten für sowas wie die Prozeßstrukturen (ETHREAD, EPROCESS usw) sein, was aber nach einer Weile aufhören müßte.

Oder meintest du, daß die "Elternanwendung" (also jene die Shellexecute aufruft) immer diese 20kB "verschwendet"?

Auf jeden Fall brauchst du dir keine Sorgen zu machen, wenn Speicher außerhalb deiner Prozesse alloziert oder freigegeben wird. Das beherrscht das System hervorragend und auch recht effizient. Z.T. wird das System einfach Sachen "zurückstellen", damit sie später wiederverwendet werden.

"Globale" Speicherlecks wie in Win16 oder DOS kann es auf NT (XP) nicht geben.
  Mit Zitat antworten Zitat
kalmi01
(Gast)

n/a Beiträge
 
#5

Re: ShellExecute(Prog) frisst Speicher, wie GarbageCollectio

  Alt 14. Mai 2006, 16:17
Hallo Olli,
Zitat:
Auf jeden Fall brauchst du dir keine Sorgen zu machen, wenn Speicher außerhalb deiner Prozesse alloziert oder freigegeben wird. Das beherrscht das System hervorragend und auch recht effizient. Z.T. wird das System einfach Sachen "zurückstellen", damit sie später wiederverwendet werden
Tja leider nicht.
Mein Prog ruft die Fremdanwendung auf und wartet auf das Ergebnis, arbeitet es ab.
Soweit so gut.
Wenn ich jetzt einen Moment warte, wird der Speicher wieder freigegeben.
Da ich aber 0,5 Mio. Transaktionen habe, warte ich nicht, sondern verarbeite gleich den Nächsten.
Und dann wird der Speicher nicht wieder freigegeben.
Mein Prog muss also nach ~25000 Transaktionen beenden, weil dann das freie RAM aufgebraucht ist.
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#6

Re: ShellExecute(Prog) frisst Speicher, wie GarbageCollectio

  Alt 14. Mai 2006, 16:40
Schonmal mit CreateProcess statt ShellExecute versucht? Oder bist du dir wirklich sicher, dass es von dem ShellExecute kommt?
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#7

Re: ShellExecute(Prog) frisst Speicher, wie GarbageCollectio

  Alt 14. Mai 2006, 16:41
dann warte doch nach 10k Transaktionen mal n paar sekunden...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#8

Re: ShellExecute(Prog) frisst Speicher, wie GarbageCollectio

  Alt 14. Mai 2006, 17:19
Zitat von kalmi01:
Tja leider nicht.
Mein Prog ruft die Fremdanwendung auf und wartet auf das Ergebnis, arbeitet es ab.
Soweit so gut.
Wenn ich jetzt einen Moment warte, wird der Speicher wieder freigegeben.
Da ich aber 0,5 Mio. Transaktionen habe, warte ich nicht, sondern verarbeite gleich den Nächsten.
Und dann wird der Speicher nicht wieder freigegeben.
Mein Prog muss also nach ~25000 Transaktionen beenden, weil dann das freie RAM aufgebraucht ist.
Selbst wenn es eine MMF benutzen würde, würde die MMF ja wieder freigegeben, wenn alle Handles zu ihr geschlossen werden. Kann die Symptome so nicht nachvollziehen. Bist du sicher, daß die Prozesse wirklich vollständig beendet werden?

Kann es sein, daß du einen Treiber ansprichst und dieser Treiber etwas für dich macht? Vielleicht leckt ja der Treiber?

Zumindest kann ein Prozess, der bereits wieder geschlossen wurde, nicht mehr lecken. Geht einfach nicht, auch wenn die Symptome bei dir anderes vermuten ließen.
  Mit Zitat antworten Zitat
kalmi01
(Gast)

n/a Beiträge
 
#9

Re: ShellExecute(Prog) frisst Speicher, wie GarbageCollectio

  Alt 14. Mai 2006, 17:36
Hi,
bei CreateProcess ist da Ergebnis identisch.
Läuft mein Prog ohne den Fremd-Prog-Aufruf, ist der Speicherverbrauch konstant !
Wird das Fremd-Prog mit ShellExecute oder CreateProcess aufgerufen gehen bei jedem Aufruf ca. 20 KB verloren.
Nach x Prog-Aufrufen zu Pausieren bringts auch nicht !
XP scheint den verbrauchten Speicher meinem Prog zuzuordnen.

Hab es so gelöst, dass eine Endlos-Batch mein Prog aufruft, welches dann an letzter Position weiter macht.

Habe statt der Fremd-Anwendung auch schonmal testweise ein eigenes (sauberes) Prog als Aufruf verwendet.
Da war alles OK !
Also der Prog-Aufruf mit ShellExecute kann es nicht sein.

Das Fremd-Prog ist eine reine DOS-Anwendung, die Daten von Format-A nach Format-B wandelt.
Diese Umwandlung kann ich nicht nachprogrammieren, da A ein undokumentiertes Binär-Format ist.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#10

Re: ShellExecute(Prog) frisst Speicher, wie GarbageCollectio

  Alt 14. Mai 2006, 18:37
Das "saubere Programm" war aber vermutlich kein DOS-Programm?

Ich vermute mal fast, daß es sich hier um ein Problem der VDM handelt. Klingt zumindest so.
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:01 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