Офис

Найти и исправить утечки памяти в Windows 10/8/7

"Ил-2 Штурмовик" нового поколения - "Битва за Сталинград" и "Битва за Москву" #13

"Ил-2 Штурмовик" нового поколения - "Битва за Сталинград" и "Битва за Москву" #13

Оглавление:

Anonim

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

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

Прежде чем вы начнете, вы должны знать, что Утечка памяти - проблема программного обеспечения для отладки - например, в Java, JavaScript, C / C ++, Windows и т. Д. Физическая замена RAM или жесткого диска не требуется.

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

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

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

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

Поиск утечки

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

  1. Подтверждение : определение наличия утечки.
  2. Поиск утечки памяти в режиме ядра : обнаружение утечки, вызванной компонентом драйвера ядра.
  3. Поиск утечки памяти пользовательского режима : обнаружение утечки, вызванной драйвером или приложением пользовательского режима.

Распределение памяти

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

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

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

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

Наблюдение за привычками

Вам нужно следить за ненормальным использованием ОЗУ отдельными программами и приложениями. Вы можете перейти в Диспетчер задач Windows, нажав CTRL + SHIFT + ESC и добавить столбцы, такие как «Ручки», «Пользовательские объекты», «Объекты GDI» и т. Д.

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

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

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

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

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

  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] Закрыть процессы и перезапустить.

Если вы видите, что ненужный процесс занимает слишком много ОЗУ, вы можете завершить этот процесс в Диспетчере задач. Вам необходимо перезапустить устройство, чтобы освобожденное пространство было доступно для использования другими процессами. Без проблемы с перезагрузкой памяти проблема не будет решена. Один конкретный процесс, который имеет ошибки для замедления работы ПК, - Runtime Broker. Попробуйте, если это будет отключено.

2] Инструменты диагностики памяти

Для доступа к встроенному диагностическому инструменту памяти для Windows:

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

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

3] Проверка обновлений драйверов

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

  1. Нажмите Win + R и откройте окно Выполнить . Введите devmgmt.msc и нажмите Enter. Он приведет вас к диспетчеру устройств .
  2. Проверьте наличие устаревших драйверов и обновите их.
  3. Для обновлений, которые вы, возможно, пропустили, проверьте в Центре обновления Windows.

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

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

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

  1. Щелкните правой кнопкой мыши по < Этот ПК `и выберите « Расширенные настройки » на левой панели.
  2. В разделе « Дополнительно `перейдите к` Производительность `, а затем` Настройки `.
  3. Отметьте` Отрегулируйте для лучшей производительности `и нажмите OK .
  4. Перезагрузите и проверьте, не решена ли проблема.

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

5] Отключить программы, запущенные при запуске

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

  1. Перейдите в ` Диспетчер задач `.
  2. Перейдите к ` Запуск `.
  3. Отключите программы запуска, которые вам не нужно запускать по умолчанию.

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

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

  1. Перейти к ` Этот ПК ` или ` Мой компьютер `.
  2. Щелкните правой кнопкой мыши системный жесткий диск (обычно это C: диск).
  3. Перейдите к ` Инструменты `под Свойства ` и выберите « Оптимизировать ».
  4. Выберите диск для дефрагментации и выберите « Анализ ».

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

7] ClearPage File при выключении

Теперь он становится сложным, но не беспокойтесь. Вот как очистить файл страницы при каждом отключении:

  1. Введите regedit в Search для запуска редактора реестра.
  2. Введите этот путь: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerMemory Management
  3. Измените значение ClearPageFileAtShutDown на «1».
  4. Сохраните изменения и перезагрузите устройство.

Это должно сделать это.

9] Disable Superfetch

Эта служба Windows оптимизирует производительность, минимизируя время загрузки. Это позволяет Windows управлять использованием ОЗУ. Жизнь после отключения Superfetch не удобна, но сделайте это, если нужно. По крайней мере, попробуйте сделать это самостоятельно, чтобы изолировать проблему:

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

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

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

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

Здесь вам может понадобиться любое решение, которое вам может понадобиться для обнаружения или предотвращения утечек памяти. Вы можете узнать больше об утечках памяти в MSDN и Microsoft.