Ist es möglich, Programme in Windows manuell an den virtuellen Speicher zu senden?

2

Wenn auf Ihrem Computer viele Programme geöffnet sind und die Speicher- / CPU-Auslastung zu hoch ist, möchten Sie möglicherweise ein Programm schließen, ohne seinen Status zu verlieren (es an den virtuellen Speicher zu senden), und das Programm später fortsetzen. Dies wird automatisch vom Betriebssystem durchgeführt, aber das Betriebssystem weiß nicht, wie lange Sie Ihr Programm anhalten möchten, sodass es möglicherweise sehr langsam wird, wenn versucht wird, Teile jedes Programms im Speicher zu belassen und andere Teile in den virtuellen Speicher zu verschieben. Manuelles Senden eines ganzen Programms in den virtuellen Speicher und anschließendes Abrufen im selben Status, wenn dies gewünscht wird, ist eine nette Funktion. Gibt es ein Tool, das dies ermöglicht? oder kann es geschrieben werden?

Pietro Doninelli
quelle
2
Starten Sie processHacker, wählen Sie den Prozess aus, klicken Sie mit der rechten Maustaste darauf und wählen Sie "Verschiedenes" -> "Arbeitssatz reduzieren", klicken Sie auf Systeminfo-> Speicher und wählen Sie "Leere geänderte Liste"
magicandre1981

Antworten:

3

Ihre Programme werden immer im virtuellen Speicher ausgeführt. (Die Windows-Terminologie in diesem Dialogfeld, in dem Sie die Größe der Auslagerungsdatei festlegen, ist grob irreführend.)

Was Sie verlangen, ist die Fähigkeit, ein Programm zum Auslagern zu zwingen. Es gibt keine Möglichkeit, das direkt zu tun.

So wird es schließlich sehr langsam, indem versucht wird, Teile jedes Programms im Speicher zu belassen und andere Teile in den virtuellen Speicher zu verschieben.

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

Durch Windows XP würde das Minimieren des Windows einer App eine ordnungsgemäße Bereinigung erzwingen, aber ich denke, XP war das letzte Mal, dass dies zutraf.

Wenn Sie dies jedoch wirklich tun möchten, können Sie das VMmapTool von SysInternals verwenden. Beim Start werden Sie aufgefordert, einen Prozess auszuwählen. Tun Sie das, und wählen Sie dann Ansicht | Leerer Arbeitssatz.

Beachten Sie jedoch, dass hierdurch nur Seiten für die Liste der geänderten Seiten oder der Standby-Seiten freigegeben werden. (Und das nur für Seiten, die nicht in den Arbeitssätzen anderer Prozesse enthalten sind.) In die geänderte Liste abgelegte Seiten werden in die Auslagerungsdatei geschrieben und dann in die Standby-Liste verschoben. Seiten in der Standby-Liste gelten als "verfügbar", aber bis sie für eine andere Verwendung verwendet werden, enthalten sie weiterhin den Inhalt des ursprünglichen Prozesses.

Das Nettoergebnis ist genau das gleiche wie das, was Windows macht, wenn der verfügbare Arbeitsspeicher knapp wird - Sie tun es einfach früher, bevor solche Anforderungen tatsächlich bestehen.

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

Jamie Hanrahan
quelle