Намерете и коригирайте изтичане на памет в Windows 10

A Memory Leak е неправилна на ресурсите в компютърна програма дължат на грешно разпределение на паметта. Това се случва, когато местоположението на RAM, което не се използва, остава неиздадено. Изтичането на памет не трябва да се бърка с изтичане на пространство, което се отнася до програма, използваща повече RAM от необходимото. Изтичане на памет в система Windows 10/8/7 се казва, че паметта е просто недостъпна, въпреки че не се използва.

Изтичане на памет в Windows 10

Преди да започнете, трябва да знаете, че изтичането на памет е софтуерен проблем за отстраняване на грешки - например в Java, JavaScript, C / C ++, Windows и др. Не се изисква физическа подмяна на RAM или твърд диск.

Изтичане на памет в Windows 10

Защо е лошо

Очевидно е, че изтичането на памет е лошо, защото е грешка, недостатък в системата. Но нека да разберем как точно влияе на системата:

  1. Тъй като паметта не се освобождава дори когато не се използва, това води до изчерпване на паметта.
  2. Изчерпването на паметта води до стареене на софтуера.
  3. Намалената налична памет води до увеличено време за реакция и лоша производителност на системата.
  4. Непровереното изтичане на памет в крайна сметка може да доведе до срив на приложение.

За да идентифицира изтичане на памет, програмистът трябва да има достъп до изходния код на програмата.

Намиране на теча

За да разрешим даден проблем, първо трябва да го идентифицираме. Основните стъпки за откриване на изтичане на памет са:

  1. Утвърждение : Определяне дали е имало теч.
  2. Намиране на изтичане на памет в режим на ядро : Намиране на изтичане, причинено от компонент на драйвера в режим на ядро.
  3. Намиране на изтичане на памет в потребителски режим : Намиране на изтичане, причинено от драйвер или приложение в потребителски режим.

Разпределение на паметта

Има различни режими, в които приложенията разпределят RAM. Ако пространството не се освободи след употреба, изтичането на памет ще се случи независимо от начина на разпределение. Някои често срещани модели на разпределение са:

  1. Функция HealAlloc за разпределение на купчина памет. Еквивалентите на време на изпълнение на C / C ++ са malloc и нови.
  2. Функция VirtualAlloc за директно разпределение от ОС.
  3. API на Kernel32 за задържане на паметта на ядрото за приложението. Пример, CreateFile, CreateThread.
  4. API на User32 и API на Gdi32.

Предотвратяване на изтичане на памет

Всички знаем, че профилактиката е по-добра от лечението, така че ето няколко начина за предотвратяване на изтичане на памет.

Навици за наблюдение

Изтичане на памет в Windows 10

Трябва да следите за необичайно използване на RAM от отделни програми и приложения. Можете да отидете в диспечера на задачите на Windows, като натиснете CTRL + SHIFT + ESC и да добавите колоните като Handles, User Objects, GDI Objects и др.

Това ще ви помогне лесно да наблюдавате използването на ресурсите.

Инструменти на Microsoft за диагностика на изтичане на памет

Различни инструменти диагностицират изтичане на памет за различни режими на разпределение:

  1. Проверката на приложенията диагностицира изтичане на купчина.
  2. UMDH (компонент на инструментите за отстраняване на грешки в Windows) диагностицира течове за отделни процеси чрез наблюдение на разпределението на купчина памет.
  3. Trace Capture за задълбочен анализ на използването на RAM.
  4. Xperf също проследява модели за разпределение на купчина.
  5. CRT Debug Heap не само проследява разпределението на купчината, но също така позволява кодиращи практики за минимизиране на течовете.
  6. JavaScript Memory Leak Detector отстранява изтичането на памет в кодове.

Съвети за употреба

  1. Използвайте HANDLE s на ядрото и такива други интелигентни указатели за Win32 ресурси и разпределение на купчина.
  2. Вземете класове за автоматично управление на ресурсите за разпределение на ядрото от библиотеката ATL. Стандартът C ++ има auto_ptr за разпределение на купчина.
  3. Инкапсулирайте указателите за COM интерфейс в „интелигентни указатели“ с помощта на _com_ptr_t или _bstr_t или _variant_t .
  4. Наблюдавайте .NET кода за необичайно използване на паметта.
  5. Избягвайте множество изходни пътища за функции, за да позволите на разпределенията да бъдат освободени от променливи в повечето блокове до края на функция.
  6. Използвайте естествени изключения само след освобождаване на всички разпределения в блока _finally. Опаковайте цялата купчина и обработвайте разпределения в интелигентни указатели, за да използвате C ++ изключения.
  7. Винаги извиквайте функцията PropVariantClear, преди да инициализирате или изхвърлите PROPVARIANT обект.

Отстраняване на неизправности при изтичане на памет в Windows

Подобно на различните начини за предотвратяване на изтичане на памет, има различни начини за спиране на изтичането на памет. Но преди да започнете, не забравяйте първо да създадете точка за възстановяване на системата.

1] Затворете процесите и рестартирайте.

Ако видите, че ненужният процес заема твърде много RAM, можете да прекратите процеса в диспечера на задачите. Ще трябва да рестартирате устройството, така че освободеното пространство да е достъпно за използване от други процеси. Без рестартиране проблемът с изтичането на памет няма да бъде решен. Един конкретен процес, който има грешки за забавяне на компютъра, е Runtime Broker. Опитайте дали деактивирането само на това работи.

2] Диагностични инструменти за памет

Диагностика на паметта на Windows

За достъп до вградения инструмент за диагностика на памет за Windows:

  1. Запазете цялата си важна работа.
  2. Натиснете Win + R, за да отворите прозореца Run .
  3. Въведете командата mdsched.exe в прозореца Изпълнение .
  4. Рестартирайте компютъра.
  5. След рестартиране извършете основно сканиране или отидете за опциите „ Разширени “ като „ Тестово смесване “ или „ Брой пропуски “.
  6. Натиснете F10, за да започнете теста.

Това все още са временни поправки.

3] Проверете за актуализации на драйверите

Актуализирайте драйвера

Остарелите драйвери причиняват изтичане на памет. Поддържайте всички драйвери актуализирани:

  1. Натиснете Win + R и отворете прозореца Run . Въведете devmgmt.msc и натиснете Enter. Ще ви отведе до диспечера на устройствата .
  2. Проверете за остарели драйвери и ги актуализирайте всички.
  3. За актуализации, които може да сте пропуснали, проверете в Windows Update.

Това беше просто.

4] Оптимизиране на производителността

Настройте за най-добро представяне

Коригирането на Windows за производителност ще управлява всичко, включително планиране на процесора и използване на паметта, за да спре изтичането на памет. Следвай тези стъпки:

  1. Щракнете с десния бутон върху „ Този компютър “ и изберете „ Разширени “ настройки в левия прозорец.
  2. В раздела „ Разширени “ отидете на „ Производителност “, последван от „ Настройки “.
  3. Поставете отметка в „ Настройка за най-добра производителност “ и щракнете върху OK .
  4. Рестартирайте и проверете дали проблемът е решен.

Ако това просто решение не даде резултат, опитайте следващото решение.

5] Деактивирайте програмите, работещи при стартиране

Стартиращи програми

Деактивирането на обезпокоителните програми е единственият начин да се отървете от проблема с изтичането на памет. Отидете в Диспечер на задачите и деактивирайте програмата за създаване на проблеми. Ако не знаете кои програми създават проблем, направете следното:

  1. Отидете на „ Диспечер на задачите “.
  2. Отидете на „ Стартиране “.
  3. Деактивирайте стартиращите програми, които не е необходимо да стартирате по подразбиране.

6] Дефрагментирайте твърдия диск

Дефрагментиране на диска

Въпреки че Windows 10 прави това за вас автоматично, може да се наложи да правите дефрагментиране на твърдите дискове от време на време, за да оптимизирате производителността:

  1. Отидете на „ Този компютър “ или „ Моят компютър “.
  2. Щракнете с десния бутон върху системния твърд диск (обикновено C: устройство).
  3. Отидете на „ Инструменти “ под „ Свойства “ и изберете „ Оптимизиране “.
  4. Изберете устройството за дефрагментиране и изберете „ Анализиране “.

Рестартирайте компютъра си след новата фрагментация.

7] ClearPage файл при изключване

Сега се усложнява - но не се притеснявайте. Ето как да изчистите файла на страницата при всяко изключване:

  • Въведете regedit в Search, за да стартирате редактора на системния регистър.
  • Въведете този път:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerУправление на паметта
  • Променете стойността на ClearPageFileAtShutDown на '1'.
  • Запазете промените и рестартирайте устройството.

Това трябва да го направи. Не забравяйте, че процесът ви на изключване ще отнеме малко повече време.

9] Деактивирайте Superfetch

Тази услуга на Windows оптимизира производителността, като минимизира времето за зареждане. Позволява на Windows да управлява използването на RAM. Животът след деактивиране на Superfetch не е удобен, но го направете, ако трябва. Опитайте поне това, за да изолирате проблема:

  1. Потърсете services.msc и отидете в Services Manager.
  2. Потърсете „ Superfetch “ и щракнете с десния бутон, за да отидете на „ Properties “.
  3. Изберете „ Стоп “.
  4. Също така деактивирайте услугата от падащото меню.
  5. Рестартирайте компютъра и проверете дали производителността се е подобрила.

Активирайте Superfetch, ако този не работи.

10] Проверете за злонамерен софтуер

Използвайте антивирусен софтуер на трета страна или вътрешен Windows Defender на Windows 10, за да сканирате и премахнете злонамерен софтуер. Уверете се, че антивирусната програма е актуализирана, за да поддържа вашата операционна система, така че в крайна сметка да не стане причина за изтичането на памет.

Всяко решение, което може да ви потрябва за намиране или предотвратяване на изтичане на памет, е точно тук. Можете да прочетете повече за изтичане на памет в MSDN и Microsoft.

Original text


Изтичане на памет в Windows 10