Laden...

Programm mehrfach ausführen, ohne mehrfachen Speicherverbrauch

Erstellt von Komandar vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.884 Views
K
Komandar Themenstarter:in
9 Beiträge seit 2006
vor 12 Jahren
Programm mehrfach ausführen, ohne mehrfachen Speicherverbrauch

Hi.

Ich habe ein externes Programm, welches ich mehrfach ausführen muss (nehmen wir mal als Zahl: "500"mal).

Gibt es irgendeine Möglichkeit dieses Programm speicherarm auszuführen (also nicht die gängigen xMB * 500?
Ich dachte an diese Methode:

C# Launch EXE From Memory

C
1.214 Beiträge seit 2006
vor 12 Jahren

Nee.

1.130 Beiträge seit 2007
vor 12 Jahren

Auf welcher Technologie basiert es? Aber tendenziell sehe ich da eher schwarz, esseiedenn der Ersteller hat daran gedacht.

Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo Komandar,

Gibt es irgendeine Möglichkeit dieses Programm speicherarm auszuführen

unter Unix & Co kann man Prozesse forken und so weit ich weiß ist das eine Copy-On-Write-Operation. Kostet also (zunächst so gut wie) keinen Speicher. Da es normalerweise keine schreibenden Zugriffe auf das Code-Segment geben sollte, wird zumindest das Code-Segment dauerhaft geshared und nur irgendwann das Daten-Segment kopiert.

Unter Windows sieht es in dieser Hinsicht m.E. weniger rosig aus. Es gibt dort meines Wissens kein fork im Unix-Sinne.

Viel Speicher kann man trotzdem sparen, wenn man Threads statt Prozesse verwendet, denn alle Threads teilen sich von Hause aus den Code und die Daten (abgesehen vom Stack, also den lokalen Variablen und den Funktionsparametern sowie den Prozessorregistern). Das ist dann aber auch der große Nachteil: Threads sind gegeneinander viel weniger entkoppelt als Prozesse und im schlimmsten Fall reißt ein wildgewordener Thread alle anderen mit den Tod.

C# Launch EXE From Memory

Das bezieht sich nur darauf, wo die Binärdaten der EXE herkommen, also ob sie in einer Datei stehen oder im Hauptspeicher, nicht welchen Speicher die EXE nach dem Starten verbraucht.

herbivore

C
1.214 Beiträge seit 2006
vor 12 Jahren

unter Unix & Co kann man Prozesse forken und so weit ich weiß ist das eine Copy-On-Write-Operation. Kostet also (zunächst so gut wie) keinen Speicher. Da es normalerweise keine schreibenden Zugriffe auf das Code-Segment geben sollte, wird zumindest das Code-Segment dauerhaft geshared und nur irgendwann das Daten-Segment kopiert.

Kann ich bestätigen.

U
1.688 Beiträge seit 2007
vor 12 Jahren

Hallo,

ein interessanter Ansatz wird auf Codeproject vorgestellt:
Use AppDomains To Reduce Memory Consumption in .NET applications

C
1.214 Beiträge seit 2006
vor 12 Jahren

Das ist aber nicht viel anders als Threads und geht nur bei eigenen Programmen, auf fremde Programme hat man nach wie vor keinen Einfluß.

U
1.688 Beiträge seit 2007
vor 12 Jahren

Hallo Coder007,

ich sehe beides anders - AppDomains sind besser voneinander isoliert als reine Threads in einem Prozess und natürlich kann die "Host"-Anwendung auch Fremdassemblies ausführen.

Gerade bei fremden Programmen funktioniert nur diese Lösung, da ein Ausführen in eigenen Threads sonst nicht möglich ist.

K
Komandar Themenstarter:in
9 Beiträge seit 2006
vor 12 Jahren

unter Unix & Co kann man Prozesse forken und so weit ich weiß ist das eine Copy-On-Write-Operation. Kostet also (zunächst so gut wie) keinen Speicher. Da es normalerweise keine schreibenden Zugriffe auf das Code-Segment geben sollte, wird zumindest das Code-Segment dauerhaft geshared und nur irgendwann das Daten-Segment kopiert.

Es handelt sich tatsächlich um eine Linux-Umgebung auf Basis von Mono.
Daher konnte ich Deine Idee umsetzen.

Danke dafür 😃.