Kann man manuell Programme in Windows in den virtuellen Speicher senden?

1218
Pietro Doninelli

Wenn Sie über viele geöffnete Programme verfügen und Ihr Computer bei der Arbeitsspeicher- / CPU-Auslastung zu hoch wird, möchten Sie möglicherweise ein Programm schließen, ohne seinen Status zu verlieren (es in den virtuellen Speicher zu senden) und das Programm später wieder aufzunehmen. Dies wird automatisch vom Betriebssystem ausgeführt, das Betriebssystem weiß jedoch nicht, wie viel Zeit Sie zum Anhalten des Programms benötigen, so dass es letztendlich sehr langsam wird, wenn versucht wird, Teile jedes Programms im Speicher zu halten und andere Teile in den virtuellen Speicher zu tauschen. Manuelles Senden eines ganzen Programms in den virtuellen Speicher und anschließendes Abrufen im gewünschten Zustand wäre ein nettes Feature. Gibt es dazu ein Werkzeug? oder kann es geschrieben werden?

2
processHacker ausführen, Prozess auswählen, Rechtsklick ausführen und "misc" -> "working set set" auswählen, auf Systeminfo-> Memory klicken und "leere modifizierte Liste" auswählen magicandre1981 vor 8 Jahren 2

1 Antwort auf die Frage

3
Jamie Hanrahan

Ihre Programme laufen immer im virtuellen Speicher. (Die Windows-Terminologie in diesem Dialogfeld, in der Sie die Größe der Auslagerungsdatei festlegen, ist äußerst irreführend.)

Was Sie verlangen, ist die Möglichkeit, das Auslagern eines Programms zu erzwingen. Es gibt keine Möglichkeit, dies direkt zu tun.

So wird es letztendlich sehr langsam, wenn versucht wird, Teile jedes Programms im Speicher zu halten und andere Teile in den virtuellen Speicher zu tauschen.

Das passiert nicht. Speicherseiten, auf die nicht zugegriffen wird, können jederzeit für andere Zwecke freigegeben werden (und bei Bedarf auf die Festplatte geschrieben werden). Das Betriebssystem "versucht nicht, Teile jedes Programms zu speichern", unabhängig davon, ob auf sie zugegriffen wird. Wenn auf sie nicht zugegriffen wird, was normalerweise für private Seiten eines inaktiven Programms der Fall ist, bleiben sie nur im Speicher, bis durch die Bedürfnisse anderer Programme Druck entsteht. (Bis dahin hat es keinen Sinn, sie auszulagern, oder?)

Durch Windows XP würde das Minimieren des Windows einer App die Löschung eines funktionierenden Sets erzwingen, aber ich denke, dass XP das letzte war, wo dies der Fall war.

Wenn Sie das wirklich wollen, können Sie das VMmapTool von SysInternals verwenden. Nach dem Start werden Sie aufgefordert, einen Prozess auszuwählen. Tun Sie das und wählen Sie dann Ansicht | Leeres Arbeitsset.

Beachten Sie jedoch, dass dies nur Seiten für die modifizierte oder Standby-Seitenliste freigibt. (Und dies nur für Seiten, die nicht in den Arbeitssätzen anderer Prozesse enthalten sind.) In die geänderte Liste gelegte Seiten werden in die Auslagerungsdatei geschrieben und dann in die Standby-Liste verschoben. Seiten in der Standby-Liste werden als "verfügbar" betrachtet, aber bis sie für andere Zwecke erneut verwendet werden, enthalten sie immer noch den Inhalt des ursprünglichen Prozesses.

Das Nettoergebnis ist genau dasselbe wie das, was Windows tun wird, wenn der verfügbare Speicher unter Druck steht - Sie tun dies nur früher, bevor solche Anforderungen tatsächlich bestehen.

Ausführliche Informationen finden Sie natürlich im Kapitel Speicherverwaltung von Windows Internals von Solomon, Russinovich und Ionescu.