Slik finner du og reparerer minnelekkasjer i Windows 10/8/7
EN Hukommelsestap er en feilplassering av ressurs i et dataprogram på grunn av feil minneallokering. Det skjer når en RAM-plassering som ikke er i bruk, forblir utelatt. En minnelekkasje må ikke forveksles med et romlekkasje, som refererer til et program som bruker mer RAM enn nødvendig. En minnelekkasje på et Windows 10/8/7-system sies å ha funnet sted når minnet ikke er tilgjengelig, til tross for at det ikke er i bruk.
Minnelekkasjer i Windows 10
Før du begynner, bør du vite at Minnelekkasje er et problem med å feilsøke - for eksempel i Java, JavaScript, C / C ++, Windows, etc. Fysisk utskifting av RAM eller harddisk er ikke nødvendig.
Hvorfor er det dårlig
Det er åpenbart at en minnelekkasje er dårlig fordi det er en feil, en feil i systemet. Men la oss finne ut hvordan akkurat det påvirker systemet:
- Siden minnet ikke frigjøres, selv om det ikke er i bruk, resulterer det i minneutarmning.
- Utmattelse av minnet resulterer i programvare aldring.
- Redusert tilgjengelig minne fører til økt svartid og dårlig ytelse av systemet.
- Ukontrollert minnelekkasje kan etter hvert føre til krasj av et program.
For å identifisere en minnelekkasje må en programmerer ha tilgang til kildekoden til programmet.
Finne lekkasjen
For å løse et problem må vi identifisere det først. De grunnleggende trinnene for å finne en minnelekkasje er:
- Bekreftelse: Bestemme om det har oppstått lekkasje.
- Finne kjerne-modus minne lekkasje: Finne en lekkasje forårsaket av en kjernemodusdriverkomponent.
- Finne brukermodusminnelekkasje: Finne en lekkasje forårsaket av brukermodusdriver eller app.
Minneallokering
Det finnes forskjellige moduser der applikasjoner allokerer RAM. Hvis plassen ikke frigjøres etter bruk, vil minnelekkasjen oppstå uavhengig av tildelingsmodus. Noen vanlige tildelingsmønstre er:
- HealAlloc funksjon for heap minne allokering. C / C ++ runtime ekvivalenter er malloc og ny.
- VirtualAlloc funksjon for direkte tildeling fra OS.
- Kernel32 APIer for å holde kjerneminnet for appen. Eksempel, CreateFile, CreateThread.
- User32 APIer og Gdi32 APIer.
Forhindre minnelekkasje
Vi vet alle at forebygging er bedre enn kur, så her er noen måter å forhindre minnelekkasje på.
Overvåkning vaner
Du må holde øye med unormal RAM-bruk ved hjelp av individuelle programmer og programmer. Du kan gå til Windows Oppgavebehandling ved å trykke CTRL + SHIFT + ESC og legg til kolonnene som Handles, User Objects, GDI Objects, etc..
Dette vil hjelpe deg med å enkelt overvåke ressursbruk.
Microsoft-verktøy for å diagnostisere minnelekkasjer
Ulike verktøy diagnostiserer hukommelseslekkasjer for ulike tildelingsmoduser:
- Program Verifier diagnostiserer bunnlekkasje.
- UMDH (en komponent av Windows Debugging Tools) diagnostiserer lekkasjer for individuelle prosesser ved å overvåke heapminneallokeringer.
- Trace Capture for en grundig analyse av RAM-bruk.
- Xperf sporer også heapfordelingsmønstre.
- CRT Debug Heap sporer ikke bare heapallokeringer, men gir også kodingspraksis for å minimere lekkasjer.
- JavaScript Memory Leak Detector debugger hukommelse lekkasjer i koder.
Brukstips
- Bruk kjernen HÅNDTAKs og andre smarte pekere for Win32 ressurser og heap allokeringer.
- Få klasser for automatisk ressurshåndtering for kjerneallokeringer fra ATL-biblioteket. C + + standard har auto_ptr for heap allokering.
- Encapsulate COM-grensesnittpekere innenfor "smart pointers" ved hjelp av _com_ptr_t eller _bstr_t eller _variant_t.
- Overvåk .NET-koden for unormal minnebruk.
- Unngå flere utgangsstier for funksjoner som lar frigjøringer frigjøres fra variabler i de fleste blokker ved slutten av en funksjon.
- Bruk bare innfødte unntak etter at du har frigjort alle tildelinger i _finalblokken. Wrap all heap og håndtere tildelinger i smarte pekere for å kunne bruke C ++ unntak.
- Ring alltid på PropVariantClear funksjonen før gjenoppretting eller kassering av et PROVARIANT objekt.
Feilsøking av minnelekkasjer i Windows
På samme måte som de forskjellige måtene for å forhindre minnelekkasjer, finnes det ulike måter å stoppe minnelekkasjer.
1] Lukk prosesser og start på nytt.
Hvis du ser en unødvendig prosess, tar du for mye RAM, du kan avslutte prosessen i oppgavebehandling. Du må starte enheten på nytt slik at den frigjorte plassen er tilgjengelig for bruk av andre prosesser. Uten et Restart minne lekkasje problemet ikke vil bli løst. En bestemt prosess som har bugs for å senke PCen er Runtime Broker. Prøv å deaktivere det alene fungerer.
2] Memory Diagnostic Tools
Å få tilgang til det innebygde minnediagnostiske verktøyet for Windows:
- Lagre alt ditt viktige arbeid.
- trykk Vinn + R å åpne Løpe vindu.
- Skriv kommandoen mdsched.exe i Løpe vindu.
- Start PCen på nytt.
- Etter en omstart, utfør en grunnleggende skanning eller gå til "Avansert'alternativer som'Testblanding'eller'Pass teller'.
- trykk F10 å starte testen.
Disse er fremdeles midlertidige rettelser.
3] Se etter Driver oppdateringerUtdaterte drivere forårsaker minnelekkasje. Hold alle drivere oppdatert:
- trykk Vinn + R og åpne Løpe vindu. Type devmgmt.msc og trykk Enter. Det tar deg til Enhetsbehandling.
- Sjekk etter utdaterte drivere og oppdatere dem alle.
- For oppdateringer du kanskje har gått glipp av, sjekk inn Windows Update.
Dette var enkelt.
4] Optimaliser ytelsen
Justering av Windows for ytelse vil håndtere alt, inkludert prosessorplanlegging og minnebruk for å stoppe minnelekkasjer. Følg disse instruksjonene:
- Høyreklikk på 'Denne PCen'og velg'Avansert'innstillinger i venstre rute.
- Under 'Avansert'kategorien, gå til'Opptreden', etterfulgt av 'innstillinger'.
- Kryss av 'Juster for best ytelse'og klikk OK.
- Start på nytt og kontroller om problemet er løst.
Hvis denne enkle løsningen ikke fungerte, prøv den neste løsningen.
5] Deaktiver programmer som kjører ved oppstart
Deaktivering av de plagsomme programmene er den eneste måten å kvitte seg med minnelekkasjeproblemet. Gå til Oppgavebehandling og deaktiver feilsøkingsprogrammet. Hvis du ikke vet hvilke programmer som skaper problemer, gjør du dette:
- Gå til 'Oppgavebehandling'.
- Gå til 'oppstart'.
- Deaktiver oppstartsprogrammene du ikke trenger å kjøre som standard.
6] Defrag Harddisk
Selv om Windows 10 gjør dette for deg automatisk, må du kanskje defragtere harddiskene noen ganger for å optimalisere ytelsen:
- Gå til 'Denne PCen'eller'Datamaskinen min'.
- Høyreklikk systemets harddisk (vanligvis C: drive).
- Gå til 'Verktøy'under'Eiendommer'og velg'Optimal'.
- Velg stasjonen for å defragmentere og velg 'Analysere'.
Start datamaskinen på nytt etter den nye fragmenteringen.
7] ClearPage-fil ved avslutning
Det blir komplisert nå - men ikke bekymre deg. Slik fjerner du sidelfilen ved hver avslutning:
- Type regedit på Søk for å starte Registerredigering.
- Skriv inn denne banen: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
- Endre verdien av ClearPageFileAtShutDown til '1'.
- Lagre endringene og Start enheten på nytt.
Dette burde gjøre det.
9] Deaktiver Superfetch
Denne Windows-tjenesten optimaliserer ytelsen ved å minimere oppstartstid. Det lar Windows administrere RAM-bruk. Livet etter deaktivering av Superfetch er ikke praktisk, men gjør det hvis du må. Prøv i det minste å isolere problemet:
- Søke services.msc og gå til Services Manager.
- Se etter 'SuperFetch'og høyreklikk den for å gå til'Eiendommer'.
- Å velge 'Stoppe'.
- Også 'Deaktiver'tjenesten fra rullegardinmenyen.
- Start PCen på nytt og kontroller om ytelsen har forbedret seg.
Aktiver Superfetch hvis denne ikke fungerte.
10] Sjekk etter skadelig programvare
Bruk en tredjeparts antivirusprogramvare eller Windows 10s interne Windows Defender til å skanne og eliminere skadelig programvare. Kontroller at antivirusprogrammet er oppdatert for å støtte operativsystemet, slik at det ikke blir grunnen til minnelekkasjen.
Hver løsning du kanskje trenger for å finne eller forhindre minnelekkasjer, er her. Du kan lese mer om minnelekkasjer på MSDN og Microsoft.