Geheugen

Geheugenlekken vinden en oplossen in Windows 10

Geheugenlekken vinden en oplossen in Windows 10

EEN Geheugenlek 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. Er zou een geheugenlek op een Windows 10/8/7-systeem hebben plaatsgevonden wanneer 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.

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 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 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.

Het lek lokaliseren

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 Finding: Lokaliseren van een lek veroorzaakt door een drivercomponent in de kernelmodus.
  3. Geheugenlek in gebruikersmodus vinden: een lek opsporen dat is 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 new.
  2. VirtualAlloc-functie voor directe toewijzing van OS.
  3. Kernel32 API's om 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.

gewoontes volgen

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

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

Lezen: Wat zijn de soorten geheugen in een computer?

Microsoft-hulpprogramma's om geheugenlekken te diagnosticeren

Verschillende tools diagnosticeren geheugenlekken voor verschillende toewijzingsmodi:

  1. Application Verifier diagnosticeert heaplekkenap.
  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 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 HANDVATs en andere slimme aanwijzingen voor Win32-bronnen en heaptoewijzingen.
  2. Krijg klassen voor automatisch resourcebeheer voor kerneltoewijzingen uit de ATL-bibliotheek. C++ standaard heeft auto_ptr voor heaptoewijzingen.
  3. Kapsuleer COM-interfaceaanwijzers in "slimme aanwijzers" met behulp van _com_ptr_t of _bstr_t of _variant_t.
  4. Controleer de .NET-code voor abnormaal geheugengebruik.
  5. Vermijd meerdere exit-paden voor functies om toewijzingen in de meeste blokken aan het einde van een functie vrij te maken van variabelen.
  6. Gebruik native uitzonderingen alleen na het vrijmaken van alle toewijzingen in het _finally block. Wikkel alle heap- en handle-toewijzingen in slimme aanwijzers om C++-uitzonderingen te gebruiken.
  7. Bel altijd de PropVariantClear functie 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 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. U moet het apparaat opnieuw opstarten zodat de vrijgekomen ruimte beschikbaar is voor gebruik door andere processen. Zonder een Herstart geheugenlek probleem zal niet worden opgelost. Een bepaald proces met bugs om de pc te vertragen, is Runtime Broker. Probeer of alleen dat uitschakelen werkt.

2] Diagnostische hulpmiddelen voor geheugen

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

  1. Bewaar al je belangrijke werk.
  2. druk op Win + R om de te openen Rennen venster.
  3. Typ de opdracht mdsched.exe in de Rennen venster.
  4. Start de pc opnieuw op.
  5. Voer na een herstart een basisscan uit of ga voor de 'Geavanceerd'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

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

  1. druk op Win + R en open de Rennen venster. Type devmgmt.msc en druk op Enter. Het brengt je naar de Apparaat beheerder.
  2. Controleer 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

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 'Geavanceerd' instellingen in het linkerdeelvenster.
  2. Onder de 'Geavanceerd' tabblad, ga naar 'Prestatie', gevolgd door 'Instellingen'.
  3. Controleren 'Aanpassen voor de beste prestaties' en klik OK.
  4. Start opnieuw en controleer of het probleem is opgelost.

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

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

Het uitschakelen van de lastige programma's is de enige manier om van het geheugenlekprobleem af te komen. Ga naar Taakbeheer en schakel het probleemprogramma 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

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 'Mijn computer'.
  2. Klik met de rechtermuisknop op de harde schijf van het systeem (meestal C: schijf).
  3. Ga naar 'Hulpmiddelen' onder 'Eigendommen' en selecteer 'Optimaliseren'.
  4. Selecteer de schijf die u wilt defragmenteren en selecteer 'Analyseren'.

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 te wissen:

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerGeheugenbeheer

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 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. Zoeken Diensten.msc en ga naar Services Manager.
  2. Zoeken 'Superfetch' en klik er met de rechtermuisknop op om naar 'Eigendommen'.
  3. Selecteer 'Hou op'.
  4. Ook 'Uitschakelen' de service uit 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 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.

Beste gameconsole-emulators voor Linux
Dit artikel bevat een lijst van populaire emulatiesoftware voor gameconsoles die beschikbaar is voor Linux. Emulatie is een softwarecompatibiliteitsla...
Beste Linux-distributies voor gaming in 2021
Het Linux-besturingssysteem heeft een lange weg afgelegd van zijn oorspronkelijke, eenvoudige, servergebaseerde uiterlijk. Dit besturingssysteem is de...
Hoe u uw gamesessie op Linux kunt vastleggen en streamen
In het verleden werd het spelen van games alleen als een hobby beschouwd, maar met de tijd zag de game-industrie een enorme groei in termen van techno...