A Atminties nutekėjimas yra netinkamas išteklių paskirstymas kompiuterinėje programoje dėl klaidingo atminties paskirstymo. Tai atsitinka, kai nenaudojama RAM dalis lieka neišleista. Atminties nutekėjimas neturi būti painiojamas su vietos nutekėjimu, o tai reiškia programą, kurioje naudojama daugiau atminties nei reikia. Pasakyta, kad "Windows 10/8/7" atmintyje yra atminties nutekėjimas, kai atmintis nėra prieinama, nepaisant to, kad ji nenaudojama.
Atminties nutekėjimas sistemoje "Windows 10"
Prieš pradedant, turėtumėte žinoti, kad "Atminties nutekėjimas" yra programinės įrangos problema, kurią reikia atkurti, pvz., "Java", "JavaScript", "C / C ++", "Windows" ir kt. Fiziškai pakeisti RAM ar kietąjį diską nereikia.
Kodėl tai blogai?
Akivaizdu, kad atminties nutekėjimas yra blogas, nes tai yra klaida, sistemos trūkumas. Bet sužinosime, kaip tiksliai ji veikia sistemą:
- Kadangi atmintis nėra išlaisvinta netgi tada, kai ji nenaudojama, tai atminties išeikvojimas.
- Atminties išeikvojimas lemia programinės įrangos senėjimą.
- Sumažinus laisvą atmintį, sistema padidina atsako trukmę ir blogą našumą.
- Nepastebėta atminties nutekėjimas galiausiai gali sukelti programinės įrangos sugadinimą.
Norint nustatyti atminties nutekėjimą, programuotojas turi turėti prieigą prie programos šaltinio kodo.
Nutekėjimo nustatymas
Kad išspręstume problemą, pirmiausia turime ją identifikuoti. Pagrindiniai veiksmai, skirti atminties nutekėjimui rasti:
- Patvirtinimas: Nustatymas, ar įvyko nutekėjimas.
- Atraskite branduolio režimo atminties nutekėjimą: Nutekėjimo vietos nustatymas naudojant branduolio režimo tvarkyklės komponentą.
- Vartotojo atmintinės nuotėkio nustatymas: Nuotėkio nustatymas vartotojo režimo tvarkyklės ar programos.
Atminties paskirstymas
Yra skirtingi režimai, pagal kuriuos programos priskiria RAM. Jei po naudojimo nebus išlaisvintas, atminties nutekėjimas atsiras nepriklausomai nuo paskirstymo būdo. Kai kurie bendrieji paskirstymo modeliai:
- HealAlloc funkcija atminties paskirstymui. C / C ++ runtime ekvivalentai yra malloc ir nauji.
- VirtualAlloc funkcija, skirta tiesioginiam paskirstymui iš OS.
- Kernel32 API palaiko programos branduolį. Pavyzdys, CreateFile, CreateThread.
- User32 API ir Gdi32 API.
Atminties nutekėjimo prevencija
Mes visi žinome, kad prevencija yra geriau nei gydymas, todėl yra keli būdai, kaip išvengti atminties nutekėjimo.
Stebėjimo įpročiai
Jums reikia stebėti nenormalų RAM naudojimą atskirose programose ir programose. Galite eiti į "Windows" užduočių tvarkyklę paspausdami CTRL + SHIFT + ESC ir pridėti tokius stulpelius kaip rankenos, naudotojo objektai, GDI objektai ir tt
Tai padės lengvai stebėti išteklių naudojimą.
Microsoft įrankiai, skirti diagnozuoti atminties nutekėjimą
Įvairūs įrankiai diagnozuoja atminties nutekimus įvairiems paskirstymo būdams:
- Paraiškos tikrinimo priemonė diagnozuoja krūvį.
- UMDH ("Windows derinimo įrankių" komponentas) diagnozuoja atskirų procesų nuotėkius, stebėdamas krūvos atminties paskirstymą.
- Trace Capture, skirta išsamią RAM naudojimo analizę.
- "Xperf" peržvelgia krosnių paskirstymo modelius.
- CRT Debug Heap ne tik seka kuro paskirstymą, bet ir leidžia kodavimo praktikai sumažinti nutekimus.
- "JavaScript" atminties nutekėjimo detektorius debuguoja atmintinių nuotėkius koduose.
Naudojimo patarimai
- Naudokite branduolį RankenaS ir tokie kiti "Smart" nurodymai, skirti "Win32" ištekliams ir krūvelėms.
- Gaukite užsiėmimus dėl automatinio išteklių valdymo, skirto branduolių paskirstymui iš ATL bibliotekos. C + + standartas auto_ptr už krūvą paskirstymą.
- Integruoti COM sąsajos rodyklę "intelektualiuose nurodymuose" naudodami " _Com_ptr_t arba _bstr_t arba _variant_t.
- Stebėkite.NET kodą nenormaliai atminties naudojimui.
- Vykdykite daugybę funkcijų išėjimo kelio, kad funkcijos pabaigoje būtų galima išlaisvinti paskirstymą iš kintamųjų daugumoje blokų.
- Naudokite gimtąją išimtį tik išlaisvinus visus paskirstymus _finally block. Norėdami išnaudoti C + + išimtis, apsupkite visą krūvą ir tvarkykite paskirstymą į sumaniuosius rodiklius.
- Visada skambinkite PropVariantClear prieš paleidžiant ar išmetant PROPVARIANT objektą.
"Windows" atminties nutekėjimo trikčių šalinimas
Kaip ir įvairūs būdai, kaip užkirsti kelią atminties nutekėjimui, yra įvairių būdų, kaip sustabdyti atminties nutekėjimą.
1] Uždarykite procesus ir paleiskite iš naujo.
Jei pastebėsite, kad nereikalingas procesas yra per daug atminties, galite uždaryti procesą užduočių tvarkytuve. Jums reikės iš naujo paleisti įrenginį taip, kad laisvos vietos būtų galima naudoti kiti procesai. Be iš naujo paleiskite atmintinės nuotėkio problemą nebus išspręsta. Vienas konkretus procesas, kurio klaidos gali sulėtinti kompiuterį, yra "Runtime Broker". Pabandykite, jei išjungus, kad vienintelis veikia.
2] Atminties diagnostikos įrankiai
Norėdami pasiekti integruotą "Memory" diagnostikos įrankį "Windows":
- Išsaugokite visus savo svarbius darbus.
- Paspauskite Win + R atidaryti Paleisti langas.
- Įveskite komandą mdsched.exe viduje konors Paleisti langas.
- Iš naujo paleiskite kompiuterį.
- Po restarto atlikite pagrindinį nuskaitymą arba eikite į " Išplėstinė"Tokios pasirinktys kaip" Bandymo mišinys"Arba" Pass skaičius ’.
- Paspauskite F10 pradėti bandymą.
Tai vis dar laikina taisyma.
3] Patikrinkite tvarkyklių naujinius
- Paspauskite Win + R ir atidarykite Paleisti langas. Įveskite devmgmt.msc ir paspauskite Enter. Tai paims jus Įrenginių tvarkytuvė.
- Patikrinkite pasenusias tvarkykles ir atnaujinkite juos visus.
- Dėl atnaujinimų, kuriuos galėjote praleisti, patikrinkite "Windows" naujinimą.
Tai buvo paprasta.
4] Optimizuokite našumą
- Dešiniuoju pelės mygtuku spustelėkite " Šis kompiuteris"Ir pasirinkite" Išplėstinė'Nustatymai kairiojoje srityje.
- Pagal " Išplėstinė"Skirtuką eik į" Spektaklis", Po kurio rašoma" Nustatymai ’.
- Patikrinti ' Pakoreguokite geriausius rezultatus"Ir spustelėkite Gerai.
- Iš naujo paleiskite ir patikrinkite, ar problema išspręsta.
Jei šis paprastas sprendimas neveikia, pabandykite kitą sprendimą.
5] Išjungti programas, paleidžiamas paleisties
- Eiti į ' Užduočių tvarkyklė ’.
- Eiti į ' Pradėti ’.
- Išjungti paleisties programas, kurių nereikia paleisti pagal numatytuosius nustatymus.
6] Defrag standusis diskas
- Eiti į ' Šis kompiuteris"Arba" Mano kompiuteris ’.
- Dešiniuoju pelės mygtuku spustelėkite sistemos kietąjį diską (dažniausiai C: diską).
- Eiti į ' Įrankiai' pagal ' Savybės"Ir pasirinkite" Optimizuokite ’.
- Pasirinkite disko defrag ir pasirinkite " Analizuoti ’.
Paleiskite kompiuterį iš naujo po naujo suskaidymo.
7] "ClearPage" failas išjungiamas
Dabar tampa sudėtingas - bet nesijaudinkite. Štai kaip išvalyti puslapio failą kiekvieną išjungimą:
- Įveskite regedit Ieškoti, norėdami paleisti registro redaktorių.
- Įveskite šį kelią: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
- Pakeiskite vertę ClearPageFileAtShutDown į "1".
- Išsaugokite pakeitimus ir iš naujo paleiskite įrenginį.
Tai turėtų tai padaryti.
9] Išjunkite Superfetch
Ši "Windows" paslauga optimizuoja našumą, sumažinant įkrovos laiką. Tai leidžia "Windows" valdyti RAM naudojimą. Gyvenimas po "Superfetch" išjungimo nėra patogus, tačiau jei reikia, tai padaryti. Bent jau pabandykite tai išspręsti problemą:
- Paieška services.msc ir eikite į Paslaugų tvarkyklę.
- Ieškoti ' Superfetch"Ir dešiniuoju pelės mygtuku spustelėkite jį, kad eikite į" Savybės ’.
- Pasirinkite " Sustabdyti ’.
- Taip pat " Išjungti"Paslauga iš išskleidžiamojo meniu.
- Iš naujo paleiskite kompiuterį ir patikrinkite, ar našumas pagerėjo.
Įgalinkite "Superfetch", jei šis neveikia.
10] Patikrinkite kenkėjišką programinę įrangą
Norėdami nuskaityti ir pašalinti kenkėjiškas programas, naudokite trečiosios šalies antivirusinę programinę įrangą arba "Windows 10" vidaus "Windows Defender". Įsitikinkite, kad atnaujinta antivirusinė programa palaiko jūsų operacinę sistemą, kad netaptų atminties nutekėjimo priežastimi.
Čia galite rasti bet kokį sprendimą, kurio jums prireiks rasti ar išvengti atminties nutekėjimo. Galite sužinoti daugiau apie atminties nutekėjimą MSDN ir "Microsoft".
Susijusios žinutės:
- Ištaisykite "Windows Stop" klaidas arba "Blue Screen of Death"
- Kodėl Windows rodo mažiau RAM, nei įdiegta?
- "Windows 10" paleiskite, paleiskite, išjunkite greičiau
- Fizinės atminties ribos "Crash Dump" bylose "Windows 10/8/7"
- Atminties suspaudimas sistemoje "Windows 10"