Zoek en repareer geheugenlekken in Windows 11/10

Een geheugenlek(Memory Leak) is een verkeerde plaatsing van bronnen in een computerprogramma als gevolg van een foutieve geheugentoewijzing. Het gebeurt wanneer een RAM- locatie die niet in gebruik is, niet wordt vrijgegeven. Een geheugenlek moet niet worden verward met een ruimtelek, wat verwijst naar een programma dat meer RAM gebruikt dan nodig is. Een geheugenlek op een Windows 11/10/8/7 systeem zou hebben plaatsgevonden wanneer het geheugen gewoon niet toegankelijk is ondanks dat het niet in gebruik is.

Geheugenlekken in Windows 11/10

Voordat u begint, moet u weten dat een geheugenlek(Memory) een softwareprobleem is om te debuggen, bijvoorbeeld in Java , JavaScript , C/C++, Windows , enz. Het 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, want het is een bug, een fout in het systeem. Maar laten we eens kijken hoe het het systeem precies beïnvloedt:

  1. Aangezien het geheugen niet wordt vrijgemaakt, zelfs wanneer het niet in gebruik is, leidt dit tot geheugenuitputting.
  2. Uitputting van het geheugen leidt tot veroudering van de software.
  3. Verminderd beschikbaar geheugen leidt tot een langere responstijd 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.

Het lek lokaliseren

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

  1. Affirmatie(Affirmation) : Vaststellen of er een lek is opgetreden.
  2. Geheugenlek in de kernelmodus vinden(Finding Kernel-mode memory leak) : een lek opsporen dat wordt veroorzaakt door een component van een stuurprogramma in de kernelmodus.
  3. Geheugenlek in gebruikersmodus vinden(Finding User-mode memory leak) : een lek opsporen dat wordt veroorzaakt door een stuurprogramma of app in de gebruikersmodus.

Geheugentoewijzing

Er zijn verschillende modi waarin toepassingen RAM toewijzen . Als er na gebruik geen ruimte vrijkomt, zal het geheugenlek optreden, ongeacht de toewijzingsmodus. Enkele veelvoorkomende toewijzingspatronen zijn:

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

Voorkom geheugenlekken in Windows

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

gewoontes volgen

Geheugenlekken in Windows 10

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

Dit zal u helpen om het gebruik van hulpbronnen gemakkelijk te controleren.

Lezen(Read) : Wat zijn de soorten geheugen in een computer?(What are the Types of Memory in a computer?)

Microsoft -hulpprogramma's om geheugenlekken te diagnosticeren

Verschillende tools diagnosticeren geheugenlekken voor verschillende toewijzingsmodi:

  1. Application Verifier diagnosticeert heap-lekken.
  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. Ook Xperf volgt heaptoewijzingspatronen.
  5. CRT Debug Heap houdt(CRT Debug Heap) niet alleen heaptoewijzingen bij, maar maakt ook codeerpraktijken mogelijk om lekken te minimaliseren.
  6. JavaScript Memory Leak Detector debugt geheugenlekken in codes.

Gebruikstips

  1. Gebruik kernel HANDLE 's en andere slimme aanwijzers voor Win32- bronnen en heaptoewijzingen.
  2. Haal(Get) klassen op voor automatisch resourcebeheer voor kerneltoewijzingen uit de ATL - bibliotheek. C++ standaard heeft auto_ptr voor heaptoewijzingen.
  3. Kapsuleer COM(Encapsulate COM) -interfaceaanwijzers in "slimme aanwijzers" met behulp van _com_ptr_t of _bstr_t of _variant_t .
  4. Controleer(Monitor) de .NET -code op abnormaal geheugengebruik.
  5. Vermijd(Avoid) meerdere exit-paden voor functies om toewijzingen aan het einde van een functie in de meeste blokken vrij te maken van variabelen.
  6. Gebruik(Use) alleen native uitzonderingen nadat alle toewijzingen in het blok _finally zijn vrijgemaakt(_finally) . Wikkel(Wrap) alle heap- en handle-toewijzingen in slimme aanwijzers om C++-uitzonderingen te gebruiken.
  7. Roep altijd de functie PropVariantClear aan voordat u een PROPVARIANT- object opnieuw initialiseert of verwijdert.

(Troubleshoot)Geheugenlekken in Windows oplossen

Net als de verschillende manieren om geheugenlekken te voorkomen, zijn er verschillende manieren om geheugenlekken te stoppen. Maar vergeet niet om 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(Task Manager) . U moet het apparaat opnieuw opstarten zodat de vrijgekomen ruimte beschikbaar is voor gebruik door andere processen. Zonder een Herstart(Restart) geheugenlek probleem zal niet worden opgelost. Een specifiek proces dat bugs bevat om de pc te vertragen, is Runtime Broker . Probeer of alleen dat uitschakelen werkt.

2] Diagnostische hulpmiddelen voor geheugen

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.(Run)
  3. Typ de opdracht mdsched.exe in het venster Uitvoeren .(Run)
  4. Start de pc opnieuw op.
  5. Voer na een herstart een basisscan uit of ga voor de ' Geavanceerde(Advanced) ' opties zoals ' Testmix ' of ' Pass count '.
  6. Druk op F10 om de test te starten.

Dit zijn nog tijdelijke oplossingen.

3] Controleren op stuurprogramma-updates

Stuurprogrammasoftware bijwerken

Verouderde stuurprogramma's veroorzaken geheugenlekken. Houd alle stuurprogramma's up-to-date :

  1. Druk Win + R en open het venster Uitvoeren . (Run)Typ devmgmt.msc en druk op Enter . Het brengt je naar Apparaatbeheer(Device Manager) .
  2. Controleer(Check) op verouderde stuurprogramma's en werk ze allemaal bij.
  3. Voor updates die je misschien hebt gemist, check in Windows Update .

Dit was eenvoudig.

4] Prestaties optimaliseren

Aanpassen 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(This PC) ' en selecteer ' Geavanceerde(Advanced) ' instellingen in het linkerdeelvenster.
  2. Ga onder het tabblad ' Geavanceerd(Advanced) ' naar ' Prestaties(Performance) ', gevolgd door ' Instellingen(Settings) '.
  3. Vink ' Aanpassen voor beste prestaties(Adjust for best performance) ' aan en klik op OK .
  4. Start opnieuw(Restart) en controleer of het probleem is opgelost.

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

5] Schakel programma's(Programs) uit die worden uitgevoerd bij het opstarten(Startup)

Opstartprogramma's

Het uitschakelen van de lastige programma's is de enige manier om van het geheugenlekprobleem af te komen. Ga naar Taakbeheer(Task Manager) en schakel het probleemprogramma uit. Als u niet weet welke programma's de problemen veroorzaken, doet u dit:

  1. Ga naar ' Taakbeheer(Task Manager) '.
  2. Ga naar ' Opstarten(Startup) '.
  3. Schakel de opstartprogramma's(Disable the startup programs) 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(This PC) ' of ' Mijn computer(My Computer) '.
  2. Klik met de rechtermuisknop op(Right-Click) de harde schijf van het systeem (meestal C: schijf).
  3. Ga naar ' Extra(Tools) ' onder ' Eigenschappen(Properties) ' en selecteer ' Optimaliseren(Optimize) '.
  4. Selecteer de schijf die u wilt defragmenteren en selecteer ' Analyseren(Analyze) '.

Start uw computer opnieuw op na de nieuwe fragmentatie.

7] ClearPage-bestand bij afsluiten

Het wordt nu complex, maar maak je geen zorgen. Ga als volgt te werk om het paginabestand bij elke afsluiting(clear the Page File at every shutdown) te wissen :

  • Typ regedit in Zoeken(Search) om de Register-editor(Registry Editor) te starten .
  • Voer dit pad in:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
  • Wijzig de waarde van ClearPageFileAtShutDown in '1'.( ClearPageFileAtShutDown to ‘1’.)
  • Sla de wijzigingen op en start(Restart) het apparaat opnieuw op.

Dit zou het moeten doen. Houd er rekening mee dat uw afsluitproces iets meer tijd in beslag zal nemen.

9] Superfetch uitschakelen

Deze Windows-service optimaliseert de prestaties door de opstarttijd te minimaliseren. Hiermee kan Windows het (Windows)RAM- gebruik beheren . Leven(Life) 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(Properties) ' te gaan.
  3. Selecteer ' Stop '.
  4. Schakel(Disable) de service ook uit in het vervolgkeuzemenu.
  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 de interne Windows Defender van Windows 10 om malware te scannen en te verwijderen. Zorg(Make) ervoor dat de antivirus is bijgewerkt om uw besturingssysteem te ondersteunen, zodat dit 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 .



About the author

Ik ben een computerwetenschapper met meer dan 10 jaar ervaring in softwareontwikkeling en beveiliging. Ik heb een sterke interesse in Firefox-, Chrome- en Xbox-games. Ik ben vooral geïnteresseerd in hoe ik ervoor kan zorgen dat mijn code veilig en efficiënt is.



Related posts