So finden und beheben Sie Speicherverluste in Windows 10/8/7
EIN Speicherleck ist eine falsche Platzierung der Ressource in einem Computerprogramm aufgrund einer fehlerhaften Speicherzuordnung. Dies geschieht, wenn eine nicht verwendete RAM-Position nicht freigegeben wird. Ein Speicherverlust darf nicht mit einem Leerzeichenleck verwechselt werden, das sich auf ein Programm bezieht, das mehr RAM als erforderlich verwendet. Ein Speicherverlust auf einem Windows 10/8/7-System soll stattgefunden haben, wenn der Speicher nicht erreichbar ist, obwohl er nicht verwendet wird.
Speicherverluste in Windows 10
Bevor Sie beginnen, sollten Sie wissen, dass es sich bei Memory Leak um ein Softwareproblem zum Debuggen handelt - beispielsweise in Java, JavaScript, C / C ++, Windows usw. Das physische Ersetzen von RAM oder Festplatte ist nicht erforderlich.
Warum ist es schlecht
Es ist offensichtlich, dass ein Speicherleck schlecht ist, da es sich um einen Fehler handelt, einen Fehler im System. Aber lassen Sie uns herausfinden, wie genau es das System beeinflusst:
- Da der Speicher nicht freigegeben wird, selbst wenn er nicht verwendet wird, führt dies zu einer Erschöpfung des Speichers.
- Die Erschöpfung des Speichers führt zur Alterung der Software.
- Reduzierter verfügbarer Speicher führt zu einer erhöhten Antwortzeit und einer schlechten Leistung des Systems.
- Ein ungeprüfter Speicherverlust kann schließlich zum Absturz einer Anwendung führen.
Um ein Speicherverlust zu identifizieren, muss ein Programmierer Zugriff auf den Quellcode des Programms haben.
Leck lokalisieren
Um ein Problem zu lösen, müssen wir es zuerst identifizieren. Die grundlegenden Schritte zum Auffinden eines Speicherverlusts sind:
- Bestätigung: Feststellen, ob ein Leck aufgetreten ist.
- Speicherleck im Kernelmodus finden: Auffinden eines Lecks, das von einer Kernelmodustreiberkomponente verursacht wird.
- Speicherleck im Benutzermodus finden: Auffinden eines Lecks, das durch einen Benutzermodus-Treiber oder eine App verursacht wurde.
Speicherzuweisung
Es gibt verschiedene Modi, in denen Anwendungen RAM zuweisen. Wenn der Speicherplatz nach der Verwendung nicht freigegeben wird, tritt der Speicherverlust unabhängig von der Zuweisungsart auf. Einige übliche Zuteilungsmuster sind:
- HealAlloc-Funktion für die Heapspeicherzuordnung. Die C / C ++ - Laufzeitäquivalente sind malloc und neu.
- VirtualAlloc-Funktion zur direkten Zuordnung vom Betriebssystem.
- Kernel32-APIs zum Speichern des Kernel-Speichers für die App. Beispiel CreateFile, CreateThread.
- User32-APIs und Gdi32-APIs.
Verhindern von Speicherverlusten
Wir alle wissen, dass Vorbeugen besser ist als heilen. Daher gibt es einige Möglichkeiten, um einen Speicherleck zu verhindern.
Kontrollgewohnheiten
Sie müssen ein Auge auf ungewöhnliche Arbeitsspeicherauslastung einzelner Programme und Anwendungen haben. Sie können zum Windows Task-Manager wechseln, indem Sie drücken STRG + UMSCHALT + ESC und fügen Sie die Spalten wie Handles, Benutzerobjekte, GDI-Objekte usw. hinzu.
So können Sie die Ressourcennutzung einfach überwachen.
Microsoft-Tools zur Diagnose von Speicherverlusten
Verschiedene Tools diagnostizieren Speicherverluste für verschiedene Zuweisungsmodi:
- Application Verifier diagnostiziert Heap-Lecks.
- UMDH (eine Komponente der Windows-Debugging-Tools) diagnostiziert Lecks für einzelne Prozesse, indem Heapspeicherzuordnungen überwacht werden.
- Trace Capture für eine gründliche Analyse der RAM-Nutzung.
- Xperf verfolgt auch Heap-Zuweisungsmuster.
- CRT Debug Heap verfolgt nicht nur Heap-Zuweisungen, sondern ermöglicht auch die Codierung, um Leckagen zu minimieren.
- JavaScript Memory Leak Detector behebt Speicherlecks in Codes.
Tipps zur Verwendung
- Verwenden Sie den Kernel GRIFFs und andere intelligente Zeiger für Win32-Ressourcen und Heap-Zuordnungen.
- Rufen Sie Klassen für die automatische Ressourcenverwaltung für Kernelzuordnungen aus der ATL-Bibliothek ab. C ++ - Standard hat auto_ptr für Heap-Zuordnungen.
- Verkapseln Sie COM-Interface-Zeiger in "Smart-Zeiger" mit Hilfe von _com_ptr_t oder _bstr_t oder _variant_t.
- Überwachen Sie den .NET-Code auf abnormale Speicherauslastung.
- Vermeiden Sie mehrere Exit-Pfade für Funktionen, damit die Zuordnungen am Ende einer Funktion in den meisten Blöcken von Variablen freigegeben werden.
- Verwenden Sie native Ausnahmen nur, nachdem Sie alle Zuordnungen im Block _finally freigegeben haben. Packen Sie alle Heap- und Handle-Zuordnungen in intelligente Zeiger, um C ++ - Ausnahmen zu verwenden.
- Rufen Sie immer an PropVariantClear Funktion, bevor Sie ein PROPVARIANT-Objekt neu initialisieren oder verwerfen.
Fehlerbehebung bei Speicherverlusten in Windows
Genau wie die verschiedenen Möglichkeiten, um Speicherlecks zu vermeiden, gibt es verschiedene Möglichkeiten, Speicherlecks zu stoppen.
1] Prozesse schließen und neu starten.
Wenn Sie feststellen, dass ein unnötiger Prozess zu viel RAM beansprucht, können Sie den Vorgang im Task-Manager beenden. Sie müssen das Gerät neu starten, damit der freigegebene Speicherplatz für andere Prozesse verfügbar ist. Ohne einen Neustartspeicherleck wird das Problem nicht gelöst. Ein bestimmter Prozess, der Fehler aufweist, um den PC zu verlangsamen, ist Runtime Broker. Versuchen Sie, wenn das Deaktivieren allein funktioniert.
2] Speicherdiagnosetools
So greifen Sie auf das integrierte Speicherdiagnosetool für Windows zu:
- Speichern Sie Ihre wichtige Arbeit.
- Drücken Sie Win + R die öffnen Lauf Fenster.
- Geben Sie den Befehl ein mdsched.exe in dem Lauf Fenster.
- Starten Sie den PC neu.
- Führen Sie nach einem Neustart einen Basis-Scan durch oder gehen Sie zu 'Erweitert'Optionen wie'Testmischung' oder 'Pass zählen'.
- Drücken Sie F10 um den Test zu starten.
Dies sind immer noch temporäre Korrekturen.
3] Suchen Sie nach TreiberaktualisierungenVeraltete Treiber verursachen Speicherverluste. Halten Sie alle Treiber auf dem neuesten Stand:
- Drücken Sie Win + R und öffnen Sie die Lauf Fenster. Art devmgmt.msc und drücken Sie die Eingabetaste. Es bringt dich zum Gerätemanager.
- Suchen Sie nach veralteten Treibern und aktualisieren Sie sie alle.
- Überprüfen Sie in Windows Update nach möglicherweise fehlenden Updates.
Das war einfach.
4] Leistung optimieren
Durch das Anpassen von Windows für die Leistung werden alle Daten verwaltet, einschließlich der Prozessorplanung und der Speicherauslastung, um Speicherlecks zu stoppen. Folge diesen Schritten:
- Klicken Sie mit der rechten Maustaste auf 'Dieser PC'und wählen Sie'Erweitert'Einstellungen im linken Bereich.
- Unter dem 'Erweitert'tab, gehe zu'Performance', gefolgt von 'die Einstellungen'.
- Prüfen 'Für optimale Leistung anpassen'und klicken Sie auf OK.
- Starten Sie neu und prüfen Sie, ob das Problem behoben ist.
Wenn diese einfache Lösung nicht funktioniert hat, versuchen Sie die nächste Lösung.
5] Programme deaktivieren, die beim Start ausgeführt werden
Das Deaktivieren der problematischen Programme ist der einzige Weg, um das Problem des Speicherlecks zu beseitigen. Wechseln Sie zum Task-Manager und deaktivieren Sie das Problemherstellungsprogramm. Wenn Sie nicht wissen, welche Programme die Probleme verursachen, führen Sie folgende Schritte aus:
- Gehe zu 'Taskmanager'.
- Gehe zu 'Anlaufen'.
- Deaktivieren Sie die Startprogramme, die Sie nicht standardmäßig ausführen müssen.
6] Festplatte defragmentieren
Obwohl Windows 10 dies automatisch für Sie erledigt, müssen Sie gelegentlich die Festplatten defragmentieren, um die Leistung zu optimieren:
- Gehe zu 'Dieser PC' oder 'Mein Computer'.
- Klicken Sie mit der rechten Maustaste auf die Systemfestplatte (normalerweise Laufwerk C:)..
- Gehe zu 'Werkzeuge'unter'Eigenschaften'und wählen Sie'Optimieren'.
- Wählen Sie das zu defragende Laufwerk aus und wählen Sie 'Analysieren'.
Starten Sie Ihren Computer nach der neuen Fragmentierung neu.
7] ClearPage-Datei beim Herunterfahren
Jetzt wird es komplex - aber keine Sorge. So löschen Sie die Seitendatei bei jedem Herunterfahren:
- Art Regedit auf Suchen, um den Registrierungseditor zu starten.
- Geben Sie diesen Pfad ein: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
- Ändern Sie den Wert von ClearPageFileAtShutDown auf '1'.
- Speichern Sie die Änderungen und starten Sie das Gerät neu.
Das sollte es tun.
9] Superfetch deaktivieren
Dieser Windows-Dienst optimiert die Leistung, indem die Startzeit minimiert wird. Windows kann die RAM-Nutzung verwalten. Das Leben nach dem Deaktivieren von Superfetch ist nicht bequem, aber tun Sie es, wenn Sie müssen. Versuchen Sie zumindest dies alleine, um das Problem zu isolieren:
- Suche services.msc und gehen Sie zu Services Manager.
- Suchen 'Superfetch'und mit der rechten Maustaste darauf klicken'Eigenschaften'.
- Wählen 'Halt'.
- Ebenfalls 'Deaktivieren'den Dienst aus dem Dropdown-Menü.
- Starten Sie den PC neu und prüfen Sie, ob sich die Leistung verbessert hat.
Aktivieren Sie Superfetch, wenn dieser nicht funktioniert hat.
10] Auf Malware prüfen
Verwenden Sie eine Antiviren-Software eines Drittanbieters oder den internen Defender von Windows 10, um Malware zu scannen und zu beseitigen. Stellen Sie sicher, dass das Antivirenprogramm so aktualisiert ist, dass es Ihr Betriebssystem unterstützt, sodass es nicht zu einem Grund für den Speicherverlust wird.
Hier finden Sie alle Lösungen, die Sie möglicherweise benötigen, um Speicherlecks zu finden oder zu vermeiden. Weitere Informationen zu Speicherverlusten finden Sie in MSDN und Microsoft.