Kantoor

Geheugenlekken zoeken en oplossen in Windows 10/8/7

Upgrade to Windows 10 for free (especially from Windows 7)

Upgrade to Windows 10 for free (especially from Windows 7)

Inhoudsopgave:

Anonim

A Geheugenlek is een verkeerde plaatsing van bronnen in een computerprogramma als gevolg van gebrekkige geheugentoewijzing. Het gebeurt wanneer een RAM-locatie die niet in gebruik is, niet wordt vrijgegeven. Een geheugenlek moet niet worden verward met een lek in de ruimte, wat verwijst naar een programma dat meer RAM gebruikt dan nodig is. Een geheugenlek op een Windows 10/8/7-systeem zou 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 is een softwareprobleem om te debuggen - bijvoorbeeld in Java, JavaScript, C / C ++, Windows, enz. Het fysiek vervangen van RAM of de harde schijf is niet vereist.

Waarom is het slecht

Het is duidelijk een herinnering lek is slecht omdat het een fout is, een fout in het systeem. Maar laten we eens kijken hoe het precies invloed heeft op het systeem:

  1. Aangezien het geheugen niet wordt vrijgegeven, zelfs wanneer het niet wordt gebruikt, resulteert dit in geheugendepletie.
  2. Minder beschikbaar geheugen leidt tot een langere responstijd en slechte prestaties van het systeem.
  3. Ongecontroleerd geheugenlek kan uiteindelijk leiden tot het crashen van een toepassing.
  4. 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 voor het lokaliseren van een geheugenlek zijn:

Bevestiging

  1. : Bepalen of er een lek is opgetreden. Kernelmodusgeheugenlek zoeken
  2. : Lokaliseren van een lek veroorzaakt door een stuurprogrammaonderdeel voor de kernelmodus. Geheugenlek gebruikersmodus zoeken
  3. : Lokaliseren van een lek veroorzaakt door stuurprogramma of app voor gebruikersmodus. Geheugentoewijzing

Er zijn verschillende modi waarin toepassingen RAM toewijzen. Als de ruimte na gebruik niet wordt vrijgegeven, zal het geheugenlek optreden, ongeacht de wijze van toewijzing. Enkele veelvoorkomende toewijzingspatronen zijn:

HealAlloc-functie voor toewijzing van heap-geheugen. De C / C ++ runtime-equivalenten zijn malloc en nieuw.

  1. VirtualAlloc-functie voor directe toewijzing vanuit OS.
  2. Kernel32 API`s om kernelgeheugen voor de app vast te houden. Voorbeeld, CreateFile, CreateThread.
  3. User32 API`s en Gdi32 API`s.
  4. Geheugenlekken voorkomen

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

Bewakingsgewoonten

U moet opletten of er abnormaal RAM-gebruik is door individuele programma`s en toepassingen. U kunt naar Windows Taakbeheer gaan door op

CTRL + SHIFT + ESC te drukken en de kolommen zoals Handles, Gebruikersobjecten, GDI-objecten, enz. Toe te voegen. Hiermee kunt u eenvoudig het gebruik van bronnen volgen.

Microsoft-hulpprogramma`s voor het diagnosticeren van geheugenlekken

Verschillende hulpprogramma`s stellen geheugenlekken vast voor verschillende toewijzingsmodi:

Toepassingsverificatie diagnosticeert heaplekken.

  1. UMDH (een onderdeel van Windows-hulpprogramma`s voor het oplossen van fouten) diagnosticeert lekken voor afzonderlijke processen door heapgeheugenallocaties te bewaken.
  2. Trace Capture voor een grondige analyse van RAM-gebruik.
  3. Xperf volgt ook heap-allocatiepatronen.
  4. CRT Debug Heap volgt niet alleen heapallocaties, maar maakt ook codeermethoden mogelijk om lekken te minimaliseren.
  5. JavaScript-geheugenlek Detector debugt geheugenlekken in codes.
  6. Gebruikstips

Gebruik kernel

  1. HANDLE s en dergelijke andere slimme aanwijzers voor Win32-bronnen en heaptoewijzingen. Klassen ophalen voor automatisch bronnenbeheer voor kerneltoewijzingen van de ATL-bibliotheek. C ++ -standaard heeft
  2. auto_ptr voor heaptoewijzingen. Encapseer COM-interfacepointers in "slimme aanwijzers" met behulp van
  3. _com_ptr_t of _bstr_t of _variant_t . Controleer de.NET-code op abnormaal geheugengebruik.
  4. Vermijd meerdere uitvoerpaden voor functies om toewijzingen te laten vrijkomen van variabelen in de meeste blokken aan het einde van een functie.
  5. Alleen native uitzonderingen gebruiken na het bevrijden van alle toewijzingen in het _tijds blok. Wikkel alle toewijzingen voor heap en handle in slimme pointers om C ++ -uitzonderingen te gebruiken.
  6. Bel altijd de functie
  7. PropVariantClear voordat u een PROPVARIANT-object opnieuw initialiseert of weggooit. Geheugenlekken oplossen in Windows

Net als de verschillende manieren om geheugenlekken te voorkomen, zijn er verschillende manieren om geheugenlekken te stoppen.

1] Processen sluiten en opnieuw opstarten.

Als u ziet dat een onnodig proces te veel RAM-geheugen 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 het uitschakelen alleen werkt.

2] Diagnostische hulpprogramma`s voor geheugen

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

Sla al uw belangrijke werk op.

  1. Druk op
  2. Win + R om het Run -venster te openen. Typ de opdracht
  3. mdsched.exe in het Run -venster. Start de pc opnieuw.
  4. Na een herstart, voer een basisscan uit of ga voor de opties
  5. Geavanceerd ` Testmix ` of Pass count `. Druk op
  6. F10 om de test te starten. Dit zijn nog tijdelijke oplossingen.

3] Controleren op stuurprogramma-updates

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

Druk op

  1. Win + R en open het Run -venster. Typ devmgmt.msc en druk op Enter. Je gaat naar Apparaatbeheer . Zoek naar verouderde stuurprogramma`s en update ze allemaal.
  2. Voor updates die je misschien hebt gemist, ga je naar Windows Update.
  3. Dit was eenvoudig.

4] Prestaties optimaliseren

Door Windows aan te passen voor prestaties, wordt alles beheerd, inclusief planning van de processor en geheugengebruik om geheugenlekken te voorkomen. Volg deze stappen:

Klik met de rechtermuisknop op `

  1. Deze pc ` en selecteer ` Geavanceerd ` in het linkerdeelvenster. Onder `
  2. Geavanceerd `tab, ga naar` Prestatie `, gevolgd door` Instellingen `. Vink`
  3. Aanpassen voor beste prestaties `aan en klik op OK . Start opnieuw en controleer of het probleem is opgelost.
  4. Probeer de volgende oplossing als deze eenvoudige oplossing niet werkt.

5] Programma`s uitschakelen bij opstarten

Het uitschakelen van de lastige programma`s is de enige manier om het probleem met het geheugenlek kwijt te raken. Ga naar Taakbeheer en schakel het probleemopwekkend programma uit. Als u niet weet welke programma`s het probleem veroorzaken, doet u dit:

Ga naar `

  1. Taakbeheer `. Ga naar `
  2. Opstarten `. Schakel de opstartprogramma`s uit die u niet standaard hoeft uit te voeren.
  3. 6] Defrag Hard Drive

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

Ga naar `

  1. Deze pc ` of ` Mijn computer `. Klik met de rechtermuisknop op de systeemharde schijf (meestal C: schijf).
  2. Ga naar `
  3. Hulpprogramma`s `onder` Eigenschappen `en selecteer` Optimaliseren `. Selecteer het station om te defragmenteren en selecteer`
  4. Analyse `. Start de computer opnieuw op na de nieuwe fragmentatie.

7] ClearPage-bestand bij afsluiten

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

Type

  1. regedit bij Zoeken om de Register-editor te starten. Voer dit pad in:
  2. HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Manager Geheugenbeheer Wijzig de waarde van
  3. ClearPageFileAtShutDown to `1`. Sla de wijzigingen op en start het apparaat opnieuw.
  4. Dit zou het moeten doen.

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:

Zoek

  1. services.msc en ga naar Services Manager. Zoek naar `
  2. Superfetch ` en klik er met de rechtermuisknop op om te gaan naar ` Eigenschappen `. Selecteer `
  3. Stop `. Ook `
  4. Schakel ` uit voor de service in het vervolgkeuzemenu. Start de pc opnieuw op en controleer of de prestaties zijn verbeterd.
  5. Superfetch inschakelen als dit niet werkt.

10] Controleer op malware

Gebruik een antivirussoftware van derden of Windows 10 van Windows 10 om malware te scannen en te elimineren. Zorg ervoor dat de antivirus is bijgewerkt om uw besturingssysteem te ondersteunen, zodat dit niet de reden voor het geheugenlek wordt.

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