Знайдіть та виправте витоки пам'яті в Windows 10

Витік пам'яті є зсувами ресурсу в комп'ютерній програмі з - за помилки розподілу пам'яті. Це трапляється, коли місце використання оперативної пам'яті, яке не використовується, залишається невиданим. Витік пам'яті не слід плутати з витоком простору, що стосується програми, що використовує більше оперативної пам'яті, ніж потрібно. Кажуть, що витік пам'яті в системі Windows 10/8/7 стався, коли пам'ять просто недоступна, незважаючи на те, що вона не використовується.

Витік пам'яті в Windows 10

Перш ніж почати, вам слід знати, що витік пам'яті є проблемою програмного забезпечення для налагодження - наприклад, у Java, JavaScript, C / C ++, Windows тощо. Фізична заміна оперативної пам'яті або жорсткого диска не потрібна.

Витік пам'яті в Windows 10

Чому це погано

Очевидно, що витік пам'яті поганий, оскільки це помилка, недолік системи. Але давайте з’ясуємо, як саме це впливає на систему:

  1. Оскільки пам'ять не звільняється, навіть коли вона не використовується, це призводить до виснаження пам'яті.
  2. Виснаження пам'яті призводить до старіння програмного забезпечення.
  3. Зменшення доступної пам'яті призводить до збільшення часу відгуку та низької продуктивності системи.
  4. Неконтрольований витік пам'яті може в підсумку призвести до збою програми.

Для того, щоб виявити витік пам'яті, програміст повинен мати доступ до вихідного коду програми.

Розташування витоку

Для того, щоб вирішити проблему, нам спочатку потрібно її визначити. Основними кроками для виявлення витоку пам'яті є:

  1. Підтвердження : Визначення, чи стався витік.
  2. Пошук витоку пам'яті в режимі ядра : виявлення витоку, спричиненого компонентом драйвера режиму ядра.
  3. Пошук витоку пам’яті в користувацькому режимі : виявлення витоків, спричинених драйвером або програмою користувацького режиму.

Виділення пам'яті

Існують різні режими, в яких програми виділяють оперативну пам’ять. Якщо простір не звільняється після використання, витік пам'яті відбуватиметься незалежно від способу виділення. Деякі загальні схеми розподілу:

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

Запобігання витоку пам’яті

Ми всі знаємо, що профілактика краща за лікування, тому ось кілька способів запобігти витоку пам’яті.

Моніторингові звички

Витік пам'яті в Windows 10

Потрібно стежити за ненормальним використанням оперативної пам’яті окремими програмами та програмами. Ви можете перейти до диспетчера завдань Windows, натиснувши CTRL + SHIFT + ESC і додати стовпці, такі як Handles, User Objects, GDI Objects тощо.

Це допоможе вам легко контролювати використання ресурсів.

Інструменти Microsoft для діагностики витоків пам'яті

Різні інструменти діагностують витоки пам’яті для різних режимів розподілу:

  1. Засіб перевірки діагностує витік купи.
  2. UMDH (компонент інструментів налагодження Windows) діагностує витоки для окремих процесів, відстежуючи виділення купи пам'яті.
  3. Trace Capture для ретельного аналізу використання оперативної пам'яті.
  4. Xperf теж відстежує шаблони розподілу купи.
  5. CRT Debug Heap не тільки відстежує розподіл купи, але також дозволяє практикувати кодування, щоб мінімізувати витоки.
  6. Детектор витоків пам'яті JavaScript налагоджує витоки пам'яті в кодах.

Поради щодо використання

  1. Використовуйте HANDLE s ядра та такі інтелектуальні вказівники для ресурсів Win32 та розподілу купи.
  2. Отримайте класи для автоматичного управління ресурсами для розподілу ядра з бібліотеки ATL. Стандарт C ++ має auto_ptr для розподілу купи.
  3. Encapsulate COM інтерфейс покажчиків всередині «розумних покажчиків» за допомогою _com_ptr_t або _bstr_t або _variant_t .
  4. Відстежуйте код .NET на предмет неправильного використання пам’яті.
  5. Уникайте декількох шляхів виходу для функцій, щоб дозволити виділенням звільнення від змінних у більшості блоків до кінця функції.
  6. Використовуйте природні винятки лише після звільнення всіх розподілів у блоці _finally. Оберніть всю купу та обробляйте розподіли в розумні вказівники, щоб використовувати винятки на C ++.
  7. Завжди викликайте функцію PropVariantClear перед повторною ініціалізацією або відкиданням об’єкта PROPVARIANT.

Усунення несправностей пам'яті в Windows

Подібно до різних способів запобігти витоку пам'яті, існують різні способи зупинити витоки пам'яті. Але перед початком роботи не забудьте спочатку створити точку відновлення системи.

1] Закрийте процеси та перезапустіть.

Якщо ви бачите, що непотрібний процес забирає занадто багато оперативної пам'яті, ви можете завершити процес у диспетчері завдань. Вам потрібно буде перезапустити пристрій, щоб звільнений простір був доступний для використання іншими процесами. Без перезапуску проблему витоку пам'яті не вирішити. Одним із особливих процесів, що спричиняє помилки для уповільнення роботи ПК, є Runtime Broker. Спробуйте, якщо вимкнення цього лише працює.

2] Інструменти діагностики пам'яті

Діагностика пам'яті Windows

Щоб отримати доступ до вбудованого засобу діагностики пам'яті для Windows:

  1. Збережіть всю свою важливу роботу.
  2. Натисніть Win + R, щоб відкрити вікно запуску .
  3. Введіть команду mdsched.exe у вікні Виконати .
  4. Перезавантажте ПК.
  5. Після перезапуску виконайте базове сканування або перейдіть до опцій « Додатково », таких як « Тестова суміш » або « Кількість проходів ».
  6. Натисніть F10, щоб розпочати тест.

Це все ще тимчасові виправлення.

3] Перевірте наявність оновлень драйверів

Оновіть програмне забезпечення драйвера

Застарілі драйвери спричиняють витік пам'яті. Оновлюйте всі драйвери:

  1. Натисніть Win + R і відкрийте вікно Виконати . Введіть 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 ManagerMemory Management
  • Змініть значення ClearPageFileAtShutDown на '1'.
  • Збережіть зміни та перезапустіть пристрій.

Це повинно це зробити. Пам’ятайте, що процес вимкнення займе трохи більше часу.

9] Вимкнути Superfetch

Ця служба Windows оптимізує продуктивність, мінімізуючи час завантаження. Це дозволяє Windows керувати використанням оперативної пам'яті. Життя після вимкнення Superfetch не зручне, але робіть це, якщо потрібно. Принаймні спробуйте це самостійно, щоб усунути проблему:

  1. Знайдіть services.msc та перейдіть до диспетчера служб.
  2. Шукайте " Superfetch " і клацніть правою кнопкою миші, щоб перейти до " Properties ".
  3. Виберіть " Зупинити ".
  4. Також " Вимкнути " послугу зі спадного меню.
  5. Перезавантажте ПК і перевірте, чи покращилася продуктивність.

Увімкніть Superfetch, якщо цей не працював.

10] Перевірте наявність зловмисного програмного забезпечення

Використовуйте сторонні антивірусні програми або власний захисник Windows 10 Windows 10 для сканування та усунення шкідливих програм. Переконайтесь, що антивірус оновлений для підтримки вашої ОС, щоб це не стало причиною витоку пам’яті.

Кожне рішення, яке вам може знадобитися для пошуку або запобігання витоку пам’яті, знаходиться саме тут. Ви можете прочитати більше про витоки пам’яті на MSDN та Microsoft.

Original text


Витік пам'яті в Windows 10