Zoek en repareer geheugenlekken in Windows 10

Een geheugenlek is een verkeerde plaatsing van een bron in een computerprogramma als gevolg van een verkeerde geheugentoewijzing. Het gebeurt wanneer een RAM-locatie die niet in gebruik is, niet wordt vrijgegeven. Een geheugenlek moet niet worden verward met een ruimtelek, dat verwijst naar een programma dat meer RAM gebruikt dan nodig is. Er wordt gezegd dat er een geheugenlek op een Windows 10/8/7-systeem heeft plaatsgevonden terwijl het geheugen gewoon niet toegankelijk is ondanks dat het niet in gebruik is.

Geheugenlekken in Windows 10

Voordat u begint, moet u weten dat Geheugenlek een softwareprobleem is om te debuggen - bijvoorbeeld in Java, JavaScript, C / C ++, Windows, enz. Fysiek vervangen van RAM of harde schijf is niet vereist.

Geheugenlek in Windows 10

Waarom is het slecht

Het is duidelijk dat een geheugenlek slecht is omdat het een bug is, een fout in het systeem. Maar laten we eens kijken hoe het precies het systeem beïnvloedt:

  1. Omdat het geheugen niet wordt vrijgegeven, zelfs niet wanneer het niet wordt gebruikt, leidt dit tot uitputting van het geheugen.
  2. Uitputting van het geheugen leidt tot veroudering van de software.
  3. Minder beschikbaar geheugen leidt tot een langere reactietijd en slechte prestaties van het systeem.
  4. Een ongecontroleerd geheugenlek kan uiteindelijk leiden tot het crashen van een applicatie.

Om een ​​geheugenlek te identificeren, moet een programmeur toegang hebben tot de broncode van het programma.

Lokaliseren van het lek

Om een ​​probleem op te lossen, moeten we het eerst identificeren. De basisstappen om een ​​geheugenlek te lokaliseren zijn:

  1. Bevestiging : bepalen of er een lek is opgetreden.
  2. Geheugenlek in kernelmodus vinden : een lek lokaliseren dat wordt veroorzaakt door een onderdeel van een stuurprogramma in de kernelmodus.
  3. Geheugenlek in gebruikersmodus vinden : een lek lokaliseren dat wordt veroorzaakt door het stuurprogramma of de app in de gebruikersmodus.

Geheugentoewijzing

Er zijn verschillende modi waarin applicaties RAM toewijzen. Als de ruimte na gebruik niet wordt vrijgemaakt, zal het geheugenlek optreden ongeacht de wijze van toewijzing. Enkele veel voorkomende toewijzingspatronen zijn:

  1. HealAlloc-functie voor heap-geheugentoewijzing. De C / C ++ runtime-equivalenten zijn malloc en nieuw.
  2. VirtualAlloc-functie voor directe toewijzing vanuit OS.
  3. Kernel32 API's om het kernelgeheugen voor de app vast te houden. Voorbeeld, CreateFile, CreateThread.
  4. User32 API's en Gdi32 API's.

Geheugenlekken voorkomen

We weten allemaal dat voorkomen beter is dan genezen, dus hier zijn enkele manieren om een ​​geheugenlek te voorkomen.

Gewoonten volgen

Geheugenlekken in Windows 10

U moet letten op abnormaal RAM-gebruik door afzonderlijke programma's en applicaties. U kunt naar Windows Taakbeheer gaan door op CTRL + SHIFT + ESC te drukken en de kolommen zoals Handles, User Objects, GDI Objects, etc. toe te voegen.

Dit zal u helpen het gebruik van bronnen gemakkelijk te volgen.

Microsoft-hulpprogramma's om geheugenlekken te diagnosticeren

Verschillende tools diagnosticeren geheugenlekken voor verschillende toewijzingsmodi:

  1. Application Verifier stelt heap-lekken vast.
  2. UMDH (een onderdeel van Windows Debugging Tools) diagnosticeert lekken voor individuele processen door heap-geheugentoewijzingen te bewaken.
  3. Trace Capture voor een grondige analyse van het RAM-gebruik.
  4. Xperf volgt ook heap-toewijzingspatronen.
  5. CRT Debug Heap houdt niet alleen heap-toewijzingen bij, maar maakt ook coderingspraktijken mogelijk om lekken te minimaliseren.
  6. JavaScript Memory Leak Detector debugt geheugenlekken in codes.

Gebruikstips

  1. Gebruik kernel HANDLE s en dergelijke andere slimme tips voor Win32-bronnen en heap-toewijzingen.
  2. Krijg klassen voor automatisch bronbeheer voor kerneltoewijzingen uit de ATL-bibliotheek. C ++ standaard heeft auto_ptr voor heap-toewijzingen.
  3. Kapselt COM-interface-verwijzingen in "slimme verwijzingen" in met behulp van _com_ptr_t of _bstr_t of _variant_t .
  4. Controleer de .NET-code op abnormaal geheugengebruik.
  5. Vermijd meerdere exit-paden voor functies om toewijzingen aan het einde van een functie vrij te laten zijn van variabelen in de meeste blokken.
  6. Gebruik native uitzonderingen alleen nadat alle toewijzingen in het _finally-blok zijn vrijgemaakt. Verpak alle heap en verwerk toewijzingen in slimme aanwijzers om C ++ uitzonderingen te gebruiken.
  7. Roep altijd de PropVariantClear- functie aan voordat u een PROPVARIANT-object opnieuw initialiseert of verwijdert.

Problemen met geheugenlekken in Windows oplossen

Net als de verschillende manieren om geheugenlekken te voorkomen, zijn er verschillende manieren om geheugenlekken te stoppen. Maar vergeet niet eerst een systeemherstelpunt te maken voordat u begint.

1] Sluit processen en start opnieuw.

Als u ziet dat een onnodig proces te veel RAM in beslag neemt, kunt u het proces beëindigen in Taakbeheer. U moet het apparaat opnieuw opstarten zodat de vrijgekomen ruimte beschikbaar is voor gebruik door andere processen. Zonder een herstart zal het geheugenlekprobleem niet worden opgelost. Een bepaald proces met bugs om de pc te vertragen, is Runtime Broker. Probeer of het uitschakelen van dat alleen werkt.

2] Geheugendiagnosetools

Windows geheugendiagnose

Om toegang te krijgen tot de ingebouwde Memory Diagnostic Tool voor Windows:

  1. Bewaar al je belangrijke werk.
  2. Druk op Win + R om het venster Uitvoeren te openen .
  3. Typ de opdracht mdsched.exe in het venster Uitvoeren .
  4. Start de pc opnieuw op.
  5. Voer na een herstart een basisscan uit of ga voor de ' Geavanceerde ' opties zoals ' Testmix ' of ' Aantal slagen '.
  6. Druk op F10 om de test te starten.

Dit zijn nog steeds tijdelijke oplossingen.

3] Controleer op stuurprogramma-updates

Update de stuurprogrammasoftware

Verouderde stuurprogramma's veroorzaken geheugenlekken. Houd alle stuurprogramma's bijgewerkt:

  1. Druk op Win + R en open het venster Uitvoeren . Typ devmgmt.msc en druk op Enter. U gaat naar Apparaatbeheer .
  2. Controleer op verouderde stuurprogramma's en werk ze allemaal bij.
  3. Kijk in Windows Update voor updates die u mogelijk hebt gemist.

Dit was simpel.

4] Optimaliseer de prestaties

Pas aan voor de beste prestaties

Door Windows aan te passen voor prestaties, wordt alles beheerd, inclusief processorplanning en geheugengebruik om geheugenlekken te stoppen. Volg deze stappen:

  1. Klik met de rechtermuisknop op ' Deze pc ' en selecteer ' Geavanceerde ' instellingen in het linkerdeelvenster.
  2. Ga onder het tabblad ' Geavanceerd ' naar ' Prestaties ', gevolgd door ' Instellingen '.
  3. Vink ' Aanpassen voor beste prestaties ' aan en klik op OK .
  4. Start opnieuw en controleer of het probleem is opgelost.

Als deze eenvoudige oplossing niet werkte, probeer dan de volgende oplossing.

5] Schakel programma's uit die worden uitgevoerd bij het opstarten

Opstartprogramma's

Het uitschakelen van de lastige programma's is de enige manier om het geheugenlekprobleem op te lossen. Ga naar Taakbeheer en schakel het programma voor het maken van problemen uit. Als u niet weet welke programma's de problemen veroorzaken, doet u dit:

  1. Ga naar ' Taakbeheer '.
  2. Ga naar ' Opstarten '.
  3. Schakel de opstartprogramma's uit die u niet standaard hoeft uit te voeren.

6] Harde schijf defragmenteren

Schijfdefragmentatie

Hoewel Windows 10 dit automatisch voor u doet, moet u de harde schijven mogelijk af en toe defragmenteren om de prestaties te optimaliseren:

  1. Ga naar ' Deze pc ' of 'Deze computer '.
  2. Klik met de rechtermuisknop op de harde schijf van het systeem (meestal station C:).
  3. Ga naar ' Tools ' onder ' Eigenschappen ' en selecteer ' Optimaliseren '.
  4. Selecteer het station dat u wilt defragmenteren en selecteer ' Analyseren '.

Start uw computer opnieuw op na de nieuwe fragmentatie.

7] ClearPage-bestand bij afsluiten

Het wordt nu ingewikkeld - maar maak je geen zorgen. Ga als volgt te werk om het paginabestand bij elke afsluiting te wissen:

  • Typ regedit op Zoeken om de Register-editor te starten.
  • Voer dit pad in:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Manager Geheugenbeheer
  • Wijzig de waarde van ClearPageFileAtShutDown in '1'.
  • Sla de wijzigingen op en start het apparaat opnieuw op.

Dit zou het moeten doen. Onthoud dat uw afsluitproces iets meer tijd in beslag zal nemen.

9] Schakel Superfetch uit

Deze Windows-service optimaliseert de prestaties door de opstarttijd te minimaliseren. Hiermee kan Windows het RAM-gebruik beheren. Het leven na het uitschakelen van Superfetch is niet handig, maar doe het als het moet. Probeer dit in ieder geval alleen om het probleem te isoleren:

  1. Zoek services.msc en ga naar Services Manager.
  2. Zoek naar ' Superfetch ' en klik er met de rechtermuisknop op om naar ' Eigenschappen ' te gaan.
  3. Selecteer ' Stop '.
  4. Ook ' Uitschakelen ' de service van het drop-down menu.
  5. Start de pc opnieuw op en controleer of de prestaties zijn verbeterd.

Schakel Superfetch in als deze niet werkte.

10] Controleer op malware

Gebruik antivirussoftware van derden of Windows 10's eigen Windows Defender om malware te scannen en te verwijderen. Zorg ervoor dat de antivirus is bijgewerkt om uw besturingssysteem te ondersteunen, zodat het niet de reden wordt voor het geheugenlek.

Elke oplossing die u ooit nodig zou kunnen hebben om geheugenlekken te vinden of te voorkomen, vindt u hier. U kunt meer lezen over geheugenlekken op MSDN en Microsoft.

Geheugenlekken in Windows 10