Найдите и устраните утечки памяти в Windows 11/10

Утечка памяти(Memory Leak) — это неправильное размещение ресурсов в компьютерной программе из-за неправильного распределения памяти. Это происходит, когда неиспользуемая область ОЗУ остается незанятой. Утечку памяти не следует путать с утечкой пространства, которая относится к программе, использующей больше оперативной памяти(RAM) , чем необходимо. Говорят, что утечка памяти в системе Windows 11/10/8/7 произошла, когда память просто недоступна, несмотря на то, что она не используется.

Утечки памяти в Windows 11/10

Прежде чем начать, вы должны знать, что утечка памяти(Memory) — это программная проблема, которую необходимо отладить, например, в Java , JavaScript , C/C++, Windows и т. д. Физическая замена ОЗУ(RAM) или жесткого диска не требуется.

Утечка памяти в Windows 10

Почему это плохо

Очевидно, что утечка памяти — это плохо, потому что это ошибка, недостаток в системе. Но давайте выясним, как именно это влияет на систему:

  1. Поскольку память не освобождается, даже когда она не используется, это приводит к истощению памяти.
  2. Исчерпание памяти приводит к старению программного обеспечения.
  3. Уменьшение доступной памяти приводит к увеличению времени отклика и снижению производительности системы.
  4. Неконтролируемая утечка памяти может в конечном итоге привести к сбою приложения.

Чтобы выявить утечку памяти, программисту необходимо иметь доступ к исходному коду программы.

Обнаружение утечки

Чтобы решить проблему, нам нужно сначала ее идентифицировать. Основные шаги для обнаружения утечки памяти:

  1. Подтверждение(Affirmation) : определение того, произошла ли утечка.
  2. Обнаружение утечки памяти в режиме ядра(Finding Kernel-mode memory leak) : обнаружение утечки, вызванной компонентом драйвера режима ядра.
  3. Обнаружение утечки памяти в пользовательском режиме(Finding User-mode memory leak) : обнаружение утечки, вызванной драйвером или приложением в пользовательском режиме.

Выделение памяти

Существуют разные режимы, в которых приложения выделяют оперативную память(RAM) . Если после использования пространство не освобождается, утечка памяти произойдет независимо от режима выделения. Некоторые распространенные шаблоны распределения:

  1. Функция HealAlloc(HealAlloc) для выделения памяти в куче. Эквивалентами среды выполнения C/C++ являются malloc и new.
  2. Функция VirtualAlloc(VirtualAlloc) для прямого выделения из ОС.
  3. API-интерфейсы Kernel32(Kernel32 APIs) для хранения памяти ядра для приложения. Например(Example) , CreateFile , CreateThread .
  4. API-интерфейсы User32 и API-интерфейсы Gdi32.

Предотвращение утечек памяти в Windows

Мы все знаем, что профилактика лучше, чем лечение, поэтому вот несколько способов предотвратить утечку памяти.

Мониторинг привычек

Утечки памяти в Windows 10

Вам нужно следить за ненормальным использованием ОЗУ(RAM) отдельными программами и приложениями. Вы можете перейти в диспетчер задач Windows(Windows Task Manager) , нажав CTRL+SHIFT+ESC , и добавить такие столбцы, как Handles , User Objects , GDI Objects и т. д.

Это поможет вам легко отслеживать использование ресурсов.

Читайте(Read) : Какие бывают типы памяти в компьютере?(What are the Types of Memory in a computer?)

Инструменты Microsoft(Microsoft) для диагностики утечек памяти

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

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

Советы по использованию

  1. Используйте HANDLE ядра и другие интеллектуальные указатели для ресурсов Win32 и распределения кучи.
  2. Получите(Get) классы для автоматического управления ресурсами для выделения ядра из библиотеки ATL . Стандарт С++ имеет auto_ptr для распределения кучи.
  3. Инкапсулируйте(Encapsulate COM) указатели COM-интерфейса в «умные указатели» с помощью _com_ptr_t , (_variant_t)_bstr_t или _variant_t .
  4. Отслеживайте(Monitor) код .NET на предмет ненормального использования памяти.
  5. Избегайте(Avoid) множественных выходных путей для функций, чтобы освободить выделение переменных в большинстве блоков к концу функции.
  6. Используйте(Use) нативные исключения только после освобождения всех аллокаций в блоке _finally . Оберните(Wrap) все выделения кучи и дескрипторов в интеллектуальные указатели, чтобы использовать исключения C++.
  7. Всегда вызывайте функцию PropVariantClear перед повторной инициализацией или удалением объекта PROPVARIANT .

Устранение(Troubleshoot) утечек памяти в Windows

Так же, как различные способы предотвращения утечек памяти, существуют различные способы остановить утечку памяти. Но прежде чем начать, не забудьте сначала создать точку восстановления системы .

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

Если вы видите, что ненужный процесс занимает слишком много оперативной памяти(RAM) , вы можете завершить этот процесс в диспетчере задач(Task Manager) . Вам потребуется перезагрузить устройство, чтобы освободившееся место стало доступно для использования другими процессами. Без перезагрузки(Restart) проблема с утечкой памяти не будет решена. Одним из конкретных процессов, в котором есть ошибки, замедляющие работу ПК, является Runtime Broker . Попробуйте, если отключение этого само по себе работает.

2] Средства диагностики памяти

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

Чтобы получить доступ к встроенному инструменту диагностики памяти(Memory Diagnostic Tool) для Windows:

  1. Сохраните всю свою важную работу.
  2. Нажмите Win + R , чтобы открыть окно « Выполнить» .(Run)
  3. Введите команду mdsched.exe в окне « Выполнить»(Run) .
  4. Перезагрузите компьютер.
  5. После перезагрузки выполните базовое сканирование или перейдите к « Дополнительным(Advanced) » параметрам, таким как « Тестовый микс(Test mix) » или « Счетчик пройденных(Pass count) ».
  6. Нажмите F10 , чтобы начать тест.

Это пока временные исправления.

3] Проверьте наличие обновлений драйверов

Обновить программное обеспечение драйвера

Устаревшие драйверы вызывают утечки памяти. Держите все драйверы обновленными :

  1. Нажмите Win + R и откройте окно « Выполнить» . (Run)Введите devmgmt.msc и нажмите Enter . Вы попадете в Диспетчер устройств(Device Manager) .
  2. Проверьте(Check) наличие устаревших драйверов и обновите их все.
  3. Обновления, которые вы могли пропустить, проверяйте в Центре обновления Windows(Windows Update) .

Это было просто.

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

Отрегулируйте для лучшей производительности

Настройка производительности Windows позволит управлять всем, включая планирование процессора и использование памяти, чтобы предотвратить утечку памяти. Следуй этим шагам:

  1. Щелкните правой кнопкой мыши « Этот компьютер(This PC) » и выберите « Дополнительные(Advanced) » настройки на левой панели.
  2. На вкладке « Дополнительно(Advanced) » перейдите в « Производительность(Performance) », а затем в « Настройки(Settings) ».
  3. Установите флажок « Настроить для лучшей производительности(Adjust for best performance) » и нажмите « ОК(OK) » .
  4. Перезапустите(Restart) и проверьте, решена ли проблема.

Если это простое решение не сработало, попробуйте следующее решение.

5] Отключить программы(Programs) , работающие при запуске(Startup)

Автозагрузка программ

Отключение проблемных программ — единственный способ избавиться от проблемы с утечкой памяти. Зайдите в диспетчер задач(Task Manager) и отключите программу создания проблем. Если вы не знаете, какие программы создают проблемы, сделайте следующее:

  1. Перейдите в « Диспетчер задач(Task Manager) ».
  2. Перейдите в « Автозагрузка(Startup) ».
  3. Отключите программы запуска, которые(Disable the startup programs) вам не нужны по умолчанию.

6] Дефрагментация жесткого диска

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

Хотя Windows 10 делает это за вас автоматически, вам может потребоваться время от времени дефрагментировать жесткие диски для оптимизации производительности:

  1. Перейдите в « Этот компьютер(This PC) » или « Мой компьютер(My Computer) ».
  2. Щелкните правой кнопкой мыши(Right-Click) системный жесткий диск (обычно диск C:).
  3. Перейдите в « Инструменты(Tools) » в разделе « Свойства(Properties) » и выберите « Оптимизировать(Optimize) ».
  4. Выберите диск для дефрагментации и выберите « Анализ(Analyze) ».

Перезагрузите компьютер после новой фрагментации.

7] Файл ClearPage при завершении работы

Теперь это становится сложным, но не волнуйтесь. Вот как очищать файл подкачки при каждом завершении работы(clear the Page File at every shutdown) :

  • Введите regedit в поле поиска(Search) , чтобы запустить редактор реестра(Registry Editor) .
  • Введите этот путь:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
  • Измените значение ClearPageFileAtShutDown на «1».( ClearPageFileAtShutDown to ‘1’.)
  • Сохраните изменения и перезагрузите(Restart) устройство.

Это должно сделать это. Помните, что процесс выключения займет немного больше времени.

9] Отключить супервыборку

Эта служба Windows(Windows Service) оптимизирует производительность за счет минимизации времени загрузки. Это позволяет Windows управлять использованием оперативной памяти(RAM) . Жизнь(Life) после отключения Superfetch неудобна(Superfetch) , но сделайте это, если нужно. По крайней мере, попробуйте это в одиночку, чтобы изолировать проблему:

  1. Найдите services.msc и перейдите в диспетчер служб.
  2. Найдите « Superfetch » ​​и щелкните его правой кнопкой мыши, чтобы перейти в « Свойства(Properties) ».
  3. Выберите « Стоп(Stop) ».
  4. Также « Отключить(Disable) » услугу из выпадающего меню.
  5. Перезагрузите компьютер и проверьте, улучшилась ли производительность.

Включите Superfetch, если это не сработало.

10] Проверьте наличие вредоносных программ

Используйте стороннее антивирусное программное обеспечение или встроенный в Windows 10 Защитник Windows(Windows Defender) для сканирования и устранения вредоносных программ. Убедитесь(Make) , что антивирус обновлен для поддержки вашей ОС, чтобы он не стал причиной утечки памяти.

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



About the author

Я инженер-программист с более чем 10-летним опытом работы на платформах Windows 11 и 10. Я сосредоточился на разработке и поддержке высококачественного программного обеспечения для Windows 7 и Windows 8. Я также работал над множеством других проектов, включая, помимо прочего, Chrome, Firefox, Xbox One и файлы.



Related posts