Im Laufe der Jahre, in denen ich Windows verwendet habe, bin ich an den Task-Manager gewöhnt. Von dort aus habe ich Hunderte von Apps wegen schlechten Verhaltens getötet. Dort beobachtete er, welcher von ihnen Ressourcen verschlingt. Bis ich anfing, mit Maschinen zu arbeiten, die Hunderte von Gigabyte Speicher haben und Anwendungen entsprechende Anforderungen haben. In diesem Artikel wird erläutert, warum der Task-Manager den Speicher nicht gut nachverfolgt und was im Gegenzug verwendet werden soll. Erstens über den Mechanismus der Speicherzuweisung in Windows.
tl; dr: Der Task-Manager verbirgt Informationen zum ausgelagerten Speicher und zum virtuellen Bereich des Prozesses. Verwenden Sie besser den Process Explorer aus dem Sysinternals-Bundle.
Windows-Zuordnung
Beim Starten eines neuen Prozesses weist das Betriebssystem diesem Prozess einen fortlaufenden Adressraum zu. Auf 32-Bit-Systemen kann dieser Speicherplatz 4 GB betragen, normalerweise 2 GB für den Kernel und der Rest für den Prozess. In diesem Artikel wird die Kernspeichernutzung ignoriert. Auf 64-Bit-Systemen kann der prozessreservierte Speicher auf satte 64 TB anwachsen. Was macht dieser Prozess mit ein paar Terabyte Speicher, wenn wir tatsächlich miserable 8 GB haben? Zuerst müssen Sie verstehen, was reservierter und übertragener Speicher ist.
Reservierter und übertragener Speicher
Nicht alle Teile dieses riesigen Adressraums sind gleich. Einige Teile des Prozessadressraums werden entweder vom physischen RAM oder von einer Festplatte unterstützt (siehe unten). Reservierter Speicher gilt als festgeschrieben, wenn das Betriebssystem Ihnen diesen Speicher anbietet, wenn Sie versuchen, ihn zu verwenden. Der Rest des Adressraums, und dies ist die überwiegende Mehrheit, bleibt für die Reservierung verfügbar. Das heißt, das Betriebssystem bietet Ihnen diesen Speicherblock möglicherweise nicht immer zur Verwendung an: Es erstellt möglicherweise eine Kopie auf der Festplatte (Auslagerungsdatei) oder nicht. In C ++ wird Speicher durch Aufrufen von
VirtualAlloc reserviert. Der übertragene Speicher ist also eine hardwarebeschränkte Ressource im Betriebssystem. Mal sehen.
OS-Auslagerungsdatei
Die Auslagerungsdatei ist eine großartige Idee. Grundsätzlich
versteht das Betriebssystem
, dass einige Teile des Speichers von Ihrer Anwendung nicht besonders genutzt werden. Warum echtes physisches Gedächtnis dafür ausgeben? Stattdessen schreibt der Kernel-Prozess dieses nicht verwendete Fragment auf die Festplatte. Bis sie sich wieder an ihn wenden, wird er erst dann in Erinnerung bleiben.
Für eine detailliertere Erklärung der Funktionsweise von Speicher unter Windows empfehle ich die Vorlesung
„Secrets of Memory Management“ von Mark Russinovich.
Speicherverfolgung
Es gibt viel zu sehen und zu analysieren. An wen kann man sich wenden? Natürlich an den Task Manager!
Der RAM-Speicher wird normalerweise als Arbeitssatz bezeichnet, während der gesamte zugewiesene Speicher normalerweise als private Bytes bezeichnet wird. DLLs verwirren Definitionen, ignorieren Sie sie daher vorerst. Mit anderen Worten:
Private Bytes [ ] = +
Standardmäßig zeigt der Task-Manager genau den Arbeitssatz für jeden Prozess an:

Und das ist die Nummer, die ich mir die ganze Zeit angesehen habe. Woher wusste ich, dass sich im Task-Manager die Informationen zum übertragenen Speicher in der Spalte
Commit Size
. Ich konnte dort keine Informationen zum virtuellen Speicher finden.
Mit dem Task-Manager können Sie Informationen zum übertragenen Speicher hinzufügen, wenn Sie mit der rechten Maustaste auf die Spalten klicken und das entsprechende Element auswählenEffektive Speichermetriken
Glücklicherweise gibt es viele andere Ressourcen zum Verfolgen von Ressourcen. PerfMon (System Monitor) ist auf jedem Windows-Computer installiert und bietet sehr detaillierte Informationen zu jedem Prozess und zum gesamten System:

Interessanterweise kann der Systemmonitor Metriken auf zwei oder mehr Computern im Netzwerk untersuchen und vergleichen. Dies ist ein sehr leistungsfähiges Tool, aber der Task-Manager ist offensichtlich benutzerfreundlicher. Ich empfehle
Process Explorer als Zwischenlösung:

Boom! Visual Studio, warum befinden Sie sich immer noch im 32-Bit-Modus (achten Sie auf die virtuelle Größe)? Die maximale Speichernutzung auf meinem Computer von 89% des Maximums ist immer noch erträglich. Dies wird später nützlich sein.
Ergänzung: Viele wiesen auf andere praktische Tools hin, darunter
VMMap und
RAMMap .
Debuggen von Speicherinformationen
Glücklicherweise sind dies keine unnötigen Betriebssystem-Trivia. Aktuelle Informationen zum Speicherverbrauch haben mir beim Debuggen verschiedener Probleme viele Male geholfen.
Das Wichtigste ist, die
unberührten Teile des zugewiesenen Speichers zu finden. Swap-Daten sind ebenfalls wichtig: Dieser Speicher wird übertragen, aber nur selten oder gar nicht verwendet.
Selbst wenn der Speicher manchmal verwendet wird, ist es wichtig zu verstehen, dass dies eine teure Ressource ist. Daher sollten Sie niemals einen solchen Weg einschlagen. Hier treten Speicherlecks auf.
Aus diesen Gründen habe ich zuvor einen Vorschlag gehört, die Auslagerungsdatei vollständig zu löschen und den zugewiesenen Speicher dem Arbeitssatz gleichzusetzen. Dies ist jedoch eine zweischneidige Idee. In diesem Fall kann das Betriebssystem bei fehlerhaftem Betrieb von Anwendungen, die manchmal vergeblich Speicher reservieren, keinen Speicherauszug erstellen.