Wenn Sie ein Programm laden, muss Windows die ausführbare Datei in den Speicher kopieren, um sie auszuführen. Wenn Sie die Anwendung schließen, ist das Programm noch im RAM vorhanden. Wenn Sie das Programm erneut ausführen, muss Windows nichts von der Festplatte laden – es befindet sich alles im RAM.
Der gesamte verwendete RAM-Speicher wird zu einem Festplatten-Cache. Da die Festplatte sechs Größenordnungen langsamer ist als der Arbeitsspeicher, möchten Sie, dass möglichst viele Ihrer Programme und Datendateien im Arbeitsspeicher liegen. Ihr ungenutzter Arbeitsspeicher wird zu einem Cache. Genau das ist der Standby-Speicher. Es handelt sich um Speicher, der nicht sofort an eine Anwendung weitergegeben wird, die ihn benötigt, sondern in Bereitschaft bleibt, falls der Inhalt benötigt wird:
- https://i.imgur.com/NQwFGoB.png
Also habe ich auf meinem Computer 8 GB Speicher, der nichts anderes tut, als ein Cache für die Festplatte zu sein.
Wenn nun ein Programm etwas RAM benötigt, wird Windows ihm etwas Speicher geben. Aber bevor es einem Programm Arbeitsspeicher zur Verfügung stellen kann, muss es den Arbeitsspeicher erst einmal auf Null setzen.
Leserquiz: Warum muss Windows den Arbeitsspeicher auf Null setzen, bevor es ihn an einen anderen Prozess übergeben kann?
Windows hält einen Teil des Arbeitsspeichers, der auf Null gesetzt wurde, bereit, um ihn im Handumdrehen an eine Anwendung zu übergeben. Im Ressourcen-Manager wird dieser Nullseiten-Speicher *Freier Speicher genannt; Sie können ihn im obigen Screenshot sehen.
Er ist auch als Nullseiten-Liste bekannt, weil der Speicher Nullseiten hat und nichts Nützliches auf dem Computer tut:
- https://i.imgur.com/47xDkzT.png
Was ist SuperFetch?
SuperFetch arbeitet mit dem Speichermanager zusammen, um proaktiv und langsam Daten in den freien Speicher zu laden, so dass sie bereits zwischengespeichert sind, wenn Sie sie ausführen wollen. SuperFetch weiß, welche Anwendungen, Spiele und Entwicklungstools Sie normalerweise laden, und holt sie vorsorglich in den Arbeitsspeicher, falls sie benötigt werden.
Wenn ich also in 3 Minuten WoW lade, befinden sich diese 8 GB an Spieltexturen bereits im Arbeitsspeicher. Mit einem Tool wie RAMMap kannst du sehen, welche Dateien im RAM deines Computers zwischengespeichert sind.
Jeder, der dir sagt, du sollst SuperFetch deaktivieren, ist ein Idiot, versteht nichts von Computern und zwingt Windows dazu, langsamer zu sein, weil er den Unterschied nicht versteht zwischen:
- Standby freier Speicher
- Zerod freier Speicher
Und diese Person braucht einen Klaps auf den Hinterkopf, weil sie ihren Computer absichtlich langsam macht.
Anwendungen benutzen Speicher, nicht RAM
Eine andere Sache, die die meisten Leute nicht verstehen, ist der Unterschied zwischen Committed und Working Set. Das war früher leichter zu verstehen, als Windows 95 noch mit 4 MB Arbeitsspeicher lief.
- Auf einem Monsterrechner mit 16 MB Arbeitsspeicher
- kann ein Programm 1,5 GB Arbeitsspeicher beanspruchen
- aber nur 117 KB RAM
Das liegt daran, dass alles, was das Programm zum Funktionieren braucht, komplett in 117 KB passt. Der Rest wurde entweder in die Auslagerungsdatei geschrieben oder war bereits eine Kopie einer Datei (z.B. kann ich eine 1,5 GB große Datei in meinem Adressraum abbilden und habe 1,5 GB Speicher belegt, während ich kein RAM verbrauche)
Zum Beispiel hatte eines der Gadgets in der Windows Vista/7 Sidebar ein Speicherleck. Das bedeutete, dass der Prozess Sidebar.exe weiterhin Speicher beanspruchte (bis zur Grenze von 2 GB für einen 32-Bit-Prozess), bis der Prozess abstürzte, weil er keinen Speicher mehr hatte. Aber Sidebar.exe verbrauchte nur etwa 700 KB RAM, weil der ganze ausgelaufene Speicher in die Auslagerungsdatei geschrieben wurde (weil niemand ihn für irgendetwas benutzte).
Das ist ein Grund, warum Sie Ihre Auslagerungsdatei nicht deaktivieren. Windows kann Seiten aus dem RAM auf die Festplatte kopieren. Wenn die RAM-Seiten nicht wirklich benutzt werden, können sie für andere Dinge verwendet werden (z. B. als Festplatten-Cache), da sich die Sicherungskopie dieser Daten in der Auslagerungsdatei befindet. Sollte die Sidebar jemals wieder nach diesem Speicher fragen (was sie nie tun würde, weil sie ihn vergessen hat), kann Windows diese RAM-Inhalte wieder von der Festplatte einlagern.
tl;dr: ich habe 8.5 GB Arbeitsspeicher frei:
- 8 GB tun etwas Nützliches, um meinen Rechner schneller zu machen
- 0,5 GB gehen verloren, weil sie nichts tun
Sie wollen, dass SuperFetch Ihren Arbeitsspeicher verbraucht – es macht den Rechner schneller. Schalten Sie es nicht aus.
Diese Leute sind wie mein Vater. Er denkt, er weiß gerade genug, um gefährlich zu sein. Er rief mich an und beschwerte sich, dass sein Windows-7-Rechner 3 Minuten zum Hochfahren braucht. Ich sage ihm:
- Das liegt an dem ganzen Antiviren-Scheiß, den er benutzt
- Holen Sie sich eine SSD, die bootet in 13 Sekunden
Er holt sich eine SSD, und Windows braucht immer noch 3 Minuten zum Booten. Ich sage ihm, dass es an seinem Antivirus-Scheiß liegt. Er lehnt meine Meinung rundheraus ab. Sechs Monate später installiert er Windows neu, und jetzt startet es in 13 Sekunden.
Die Deaktivierung von SuperFetch ist wie die Deaktivierung der Auslagerungsdatei, die Installation eines RAM-Doublers oder die Verwendung eines Registrierungsreinigers: Es lässt dich wie einen Idioten aussehen. Persönlich lächle ich und nicke. Hinter deinem Rücken rede ich auf reddit Scheiße über dich.
Bonus Reading
Mehr zu diesem Thema vorher:
- /r/ProgrammerHumor/comments/68ker6/ultimate_in_garbage_collection/dh071ep/
- /r/technology/comments/1xbofp/ramdrive_to_improve_performance_and_prolong_ssd/cf9wbmf/
- /r/programming/comments/4nvimz/john_carmack_on_memory_mapped_gpu_assets/d4818ep/
Update – Könnte SuperFetch Festplatten-I/O mein Spiel nicht beeinträchtigen?
Jemand hat gefragt, ich habe geantwortet, aber ich kopiere es hierher, um die Sichtbarkeit zu erhöhen und Informationen zu verbreiten.
Könnte es wirklich die Spielleistung beeinträchtigen?
Es wird ganz einfach nicht der Fall sein.
Die größte Sorge dürfte sein, dass SuperFetch die Festplatte durcheinanderwirbelt und Daten einliest, während man versucht, sein Spiel zu spielen. Und all diese Festplattenein- und -ausgänge schaden den „echten“ Festplatteninhalten, die Sie für Ihr Spiel benötigen.
Das wird es nicht.
Überprüfen Sie den Ressourcenmonitor auf der Registerkarte „Festplatte“. Windows 7 hat eine Funktion hinzugefügt, mit der Anwendungen angeben können, dass sie E/A-Vorgänge mit einer „Hintergrundpriorität“ durchführen möchten.
- Eine SSD hat eine Reaktionszeit von etwa 1-2 ms
- eine Spinning-Platter-Festplatte hat eine Reaktionszeit von etwa 10-20 ms
Im Ressourcenmonitor können Sie also sehen, wie lange es dauert, E/A-Vorgänge auf der Festplatte durchzuführen. Bei rotierenden Festplatten sehen Sie normalerweise 10-30 ms:
- https://i.imgur.com/m4ogUc5.png
Aber während dies geschieht, laufen andere Festplatten-E/A-Vorgänge mit Hintergrundpriorität. Windows stellt sicher, dass Hintergrund-E/A-Vorgänge niemals die reguläre E/A beeinträchtigen. Hintergrund-E/A kann so stark bestraft werden, dass es 500-1000ms dauern kann, um einen Hintergrund-Lesevorgang zu bedienen:
- https://i.imgur.com/3SATs9M.png
So haben wir:
ReadResponse timeSSD1 msHDD10 msBackground Priority I/O500 ms
Es ist eine Schande, dass nicht mehr Entwickler über Background I/O Priority Bescheid wissen, ich schaue dich an:
- Steam downloader
- uTorrent
- Battle.net updater
- Windows Update(!!)
Weil es wirklich hilft.