Все способы:
- Основные причины зависания
- Причина 1: Нехватка оперативной памяти
- Причина 2: Загруженность центрального процессора
- Причина 3: Загруженность системного диска
- Причина 4: Вирусы
- Причина 5: Антивирус
- Причина 6: Неисправность оборудования
- Вопросы и ответы: 7
Одной из самых распространенных неприятностей, с которыми сталкивается пользователь ПК, является его зависание. Иногда эта проблема просто не дает работать. Полбеды, если после перезагрузки повторная ситуация не возникает, но гораздо хуже, когда данное явление начинает повторяться с учащающейся периодичностью. Давайте разберемся, почему зависает ноутбук или стационарный компьютер с Windows 7, а также определим пути решения указанной проблемы.
Читайте также: Как убрать торможение компьютера на Windows 7
Основные причины зависания
Сразу нужно провести границу между терминами «зависание компьютера» и «торможение», так как многие пользователи путаются в данных понятиях. При торможении существенно снижается скорость выполнения операций на ПК, но в целом продолжать работу на нем можно. При зависании решать поставленные задачи становится невозможно, так как устройство практически не реагирует на действия пользователя, вплоть до вхождения в полный ступор, из которого можно выйти только путем перезагрузки.
Причиной зависания ПК может быть целый ряд проблем:
- Аппаратные неполадки;
- Неправильная настройка операционной системы или сбои в её работе;
- Конфликт программ;
- Вирусы;
- Создание нагрузки на систему путем запуска приложений, превышающих по потребностям заявленные возможности ОС или аппаратной части компьютера.
Это базовые группы факторов, которые непосредственно инициируют создание причин изучаемой нами проблемы. Причем, иногда различные группы факторов могут привести к возникновению одной и той же непосредственной причины. Например, зависание может вызвать нехватка оперативной памяти ПК, которая, в свою очередь, может являться, как следствием неисправности одной из планок физического ОЗУ, так и запуска ресурсоемких программ.
Ниже мы разбираем причины данного явления и варианты решения возникших проблем.
Причина 1: Нехватка оперативной памяти
Раз мы выше упомянули в числе одной из причин зависания ПК нехватку оперативной памяти, то с её обсуждения и начнем описание проблемы, тем более что данная причина как раз является одним из наиболее частых факторов зависания. Поэтому мы остановимся на ней подробнее, чем на других факторах.
Каждый компьютер обладает определенным объемом оперативной памяти, которая зависит от технических данных ОЗУ установленного в системном блоке ПК. Посмотреть величину доступной оперативной памяти можете, выполнив следующие манипуляции.
- Кликните «Пуск». Щелкните правой кнопкой мышки (ПКМ) по позиции «Компьютер». В контекстном списке выберите «Свойства».
- Запустится окошко «Система». Нужные вам параметры будут находиться около надписи «Установленная память (ОЗУ)». Именно там будет расположена информация об объеме аппаратной и доступной оперативной памяти.
Кроме того, функции ОЗУ, в случае его переполнения, может выполнять специальный файл подкачки, размещенный на винчестере ПК.
- Чтобы посмотреть его размер, в левой части уже знакомого нам окна «Система» щелкните по надписи «Дополнительные параметры системы».
- Запускается окошко «Свойства системы». Перейдите в раздел «Дополнительно». В блоке «Быстродействие» жмите элемент «Параметры».
- В запустившемся окошке «Параметры быстродействия» переместитесь в раздел «Дополнительно». В блоке «Виртуальная память» и будет указана величина файла подкачки.
Зачем мы это все выясняли? Ответ прост: если размер памяти, который требуется для работы всех запущенных на данный момент на компьютере приложений и процессов, приблизится или превысит общую сумму доступного объема ОЗУ и файла подкачки, то система зависнет. Посмотреть, сколько требуют запущенные на ПК процессы можно через «Диспетчер задач».
- Щелкайте по «Панели задач» ПКМ. В появившемся меню выбирайте «Запустить диспетчер задач».
- Открывается окно «Диспетчера задач». Перейдите во вкладку «Процессы». В столбце «Память» будет отображаться объем памяти, который занимается конкретным процессом. Если он приблизится к сумме объема ОЗУ и файла подкачки, то система зависнет.
Что же делать в этом случае? Если система зависла «намертво» и такое положение сохраняется продолжительное время, то выход один – совершить холодную перезагрузку, то есть, нажать на кнопку, расположенную на системном блоке, которая отвечает за перезапуск ПК. Как известно, при перезагрузке или выключении компьютера оперативная память в нем очищается автоматически, а поэтому после активации он должен работать нормально.
Если же компьютер хоть немного реагирует или временами возвращает хотя бы часть работоспособности, то существует возможность исправить ситуацию и без перезагрузки. Для этого нужно вызвать «Диспетчер задач» и удалить процесс, который занимает слишком много оперативной памяти. Но вызов «Диспетчера задач» через «Панель управления» в ситуации зависания может затянуться на очень продолжительное время, так как требует выполнения нескольких манипуляций. Поэтому производим вызов более быстрым способом, нажав комбинацию Ctrl+Shift+Esc.
- После запуска «Диспетчера» во вкладке «Процессы», ориентируясь на данные в столбце «Память», найдите самый «прожорливый» элемент. Главное, чтобы он не представлял собой системный процесс. Если у вас получится, то для удобства можете кликнуть по наименованию «Память», чтобы выстроить процессы в порядке убывания размера потребления памяти. Но, как показывает практика, в условиях зависания подобные манипуляции являются большой роскошью и поэтому возможно будет проще визуально обнаружить нужный объект. После того, как вы его нашли, выделите данный элемент и жмите «Завершить процесс» или кнопку Delete на клавиатуре.
- Откроется диалоговое окошко, в котором будут расписаны все негативные последствия принудительного завершения выбранной программы. Но так как нам ничего не остается другого, жмите «Завершить процесс» или щелкайте кнопку Enter на клавиатуре.
- После того, как самый «прожорливый» процесс будет завершен, зависание системы должно прекратиться. Если компьютер продолжает подтормаживать, то попробуйте остановить ещё какую-нибудь программу из числа ресурсоемких. Но данные манипуляции должны уже проводиться гораздо быстрее, чем в самом первом случае.
Конечно, если зависание происходит относительно редко, то перезапуск или манипуляции в «Диспетчере задач» могут послужить выходом из ситуации. Но что делать, если с подобным явлением вы встречаетесь достаточно часто и причиной этому, как вы выяснили, является именно недостаток оперативной памяти? В этом случае требуется предпринять некие профилактические меры, которые позволят либо значительно уменьшить количество подобных случаев, либо вообще полностью избавится от них. Не обязательно предпринимать все шаги, которые перечислены ниже. Достаточно выполнить один или несколько из них, а потом посмотреть результат.
- Наиболее очевидным выходом является добавление оперативной памяти в компьютер путем установки дополнительной планки ОЗУ или планки ОЗУ большего объема в системный блок. Если причиной проблемы являются именно неполадки данного устройства, то это единственный способ её решения.
- Ограничьте применение ресурсоемких приложений, не запускайте одновременно много программ и вкладок браузера.
- Увеличьте размер файла подкачки. Для этого в разделе «Дополнительно» уже знакомого нам окошка параметров быстродействия в блоке «Виртуальная память» щелкайте по элементу «Изменить…».
Откроется окошко «Виртуальная память». Выберите диск, где размещен или желаете расположить файл подкачки, переставьте радиокнопку в позицию «Указать размер» и в области «Максимальный размер» и «Минимальный размер» вбейте одинаковые величины, которые будут больше, чем стоявшие до этого. Затем жмите «OK».
- Удалите из автозапуска редко используемые или ресурсоемкие программы, которые загружаются вместе со стартом системы.
Подробнее: Настройка автозапуска приложений в Windows 7
Выполнение данных рекомендаций позволит существенно сократить количество случаев зависания системы.
Урок: Очистка ОЗУ на Виндовс 7
Причина 2: Загруженность центрального процессора
Зависание системы может быть вызвано загруженностью центрального процессора. Так ли это, тоже можно проверить во вкладке «Процессы» в «Диспетчере задач». Но в этот раз обращайте внимание на значения в колонке «ЦП». Если значение одного из элементов или сумма значений всех элементов приближается к 100%, то это и является причиной неисправности.
Данную ситуацию могут вызывать различные факторы:
- Слабый центральный процессор, не рассчитанный под поставленные задачи;
- Запуск большого количества ресурсоемких приложений;
- Конфликт программ;
- Вирусная активность.
На вопросе вирусной активности мы подробно остановимся при рассмотрении отдельной причины. Сейчас же мы рассмотрим, что делать, если источником зависания послужили другие факторы.
- Прежде всего, попробуйте завершить тот процесс, который грузит ЦП, через «Диспетчер задач», так же, как это было показано ранее. Если данное действие не получается осуществить, то перезагрузите компьютер. Если программа, нагружающая процессор, добавлена в автозагрузку, то обязательно удалите её оттуда, иначе она будет постоянно запускаться при старте ПК. Постарайтесь в дальнейшем её не использовать.
- Если вы заметили, что резкое увеличение нагрузки на ПК происходит только при запуске определенного сочетания программ, то, скорее всего, они между собой конфликтуют. В этом случае, больше не включайте их одновременно.
- Наиболее радикальным способом решения проблемы является замена материнской платы на аналог с более мощным процессором. Но нужно учесть, что даже этот вариант не поможет, если причиной перегрузки ЦП является вирус или конфликт программ.
Причина 3: Загруженность системного диска
Ещё одним частым источником зависания является загруженность системного диска, то есть, того раздела винчестера, на котором установлен Виндовс. Для того чтобы проверить, так ли это, следует просмотреть объем свободного места на нем.
- Щелкните «Пуск». И переходите к уже знакомому нам пункту «Компьютер». На этот раз требуется кликнуть по нему не правой, а левой кнопкой мышки.
- Открывается окно «Компьютер», в котором расположен список дисков, подключенных к ПК, с информацией об их объеме и оставшемся свободном месте. Найдите системный диск, на котором установлен Виндовс. Чаще всего он обозначается буквой «C». Посмотрите на информацию о величине свободного места. Если данное значение менее 1 Гб, то с большой вероятностью можно сказать, что именно данный факт послужил причиной зависания.
Единственным выходом из сложившейся ситуации может быть очистка жесткого диска от мусора и лишних файлов. При этом необходимо, чтобы размер свободного места на нем превысил хотя бы 2 — 3 Гб. Именно такой объем обеспечит относительно комфортную работу на компьютере. Если манипуляции по очистке невозможно провести по причине жесткого зависания, то перезагрузите систему. Если данное действие не помогло, то придется чистить винчестер, подсоединив его к другому ПК или запустив c помощью LiveCD либо LiveUSB.
Для очистки диска можно предпринять следующие действия:
- Перенесите объемные файлы, например, фильмы или игры, на другой диск;
- Полностью очистите папку «Temp», расположенную в каталоге «Windows» на диске С;
- Используйте специальное программное обеспечение для очистки системы, например CCleaner.
Выполнение этих манипуляций поможет избавиться от зависаний.
Кроме того, как дополнительный инструмент для увеличения скорости работы компьютера можно использовать дефрагментацию жесткого диска. Но стоит помнить, что сама по себе данная процедура не сможет избавить от зависаний. Она только поможет ускорить работу системы, а чистить винчестер в случае переполненности придется в любом случае.
Урок: Как очистить место на диске C в Виндовс 7
Причина 4: Вирусы
Вирусная активность также может служить причиной зависания компьютера. Вирусы это могут делать посредством создания нагрузки на ЦП, использования большого количества оперативной памяти, повреждения системных файлов. Поэтому, при наблюдении постоянных случаев зависания ПК необходимо проверить его на наличие вредоносного кода.
Как известно, сканирование зараженного компьютера антивирусом, который установлен на нем же, редко позволяет обнаружить вирус даже в случае его наличия. В нашей же ситуации дело осложняется ещё тем, что система зависает, а это гарантированно не позволит антивирусной утилите выполнять свои непосредственные функции. Тут существует только один выход: подсоединить жесткий диск ПК, который подозревается на заражение, к другому устройству, и произвести сканирование специализированным приложением, например Dr.Web CureIt.
В случае обнаружения угрозы, действуйте согласно подсказкам программы. Очистка системы от вирусов позволит наладить нормальную роботу компьютера только в том случае, если они не повредили важные системные файлы. Иначе нужно будет произвести переустановку ОС.
Причина 5: Антивирус
Как ни парадоксально, но иногда причиной зависания может служить антивирус, установленный на вашем ПК. Это может произойти из-за различных факторов:
- Технические возможности компьютера не соответствуют требованиям антивируса, а, попросту говоря, ПК просто слишком слаб для него;
- Антивирусная программа конфликтует с системой;
- Антивирус конфликтует с другими приложениями.
Для того чтобы проверить так ли это, отключите антивирусную программу.
Подробнее: Как временно отключить антивирус
Если после этого случаи зависания перестали повторяться, то, значит, вам лучше для защиты ПК от вредоносных программ и злоумышленников использовать другие программные продукты.
Причина 6: Неисправность оборудования
Иногда причиной зависания компьютера может стать неисправность подключенного оборудования: клавиатура, мышь и т.д. Особенно большая вероятность возникновения подобных сбоев в случае повреждения жесткого диска, на котором установлен Виндовс.
Если у вас возникли подозрения на подобного рода факторы, необходимо отключить соответствующее устройство и посмотреть, как система работает без него. Если продолжительное время после этого никаких сбоев не наблюдается, то вам лучше заменить подозрительное устройство на другое. Использование неисправных приборов, подключенных к ПК, может привести к куда более серьезным проблемам, чем обычное зависание.
Иногда причиной зависания может быть статическое напряжение, создаваемое внутри системного блока. В этом случае рекомендуется почистить компьютер от пыли, а сам блок заземлить. Кстати, пыль также может служить фактором перегревания, что негативно сказывается на скорости работы.
Как видим, причинами зависания компьютера может выступить достаточно широкий перечень факторов. Для решения проблемы очень важно установить, что же именно приводит к её возникновению. Только после этого можно приступать к действиям по её ликвидации. Но если вам все-таки не удалось установить причину и вы не знаете, что дальше делать, то можете попробовать откатить систему к более ранней, стабильно работающей версии при помощи средства «Восстановление системы». Крайним шагом, в случае неудачи в попытках решить вопрос с помощью других методов, может стать переустановка операционной системы. Но нужно учесть, что если источником проблемы являются аппаратные факторы, то данный вариант вам не поможет.
Наша группа в TelegramПолезные советы и помощь
Часть 2. Зависание приложений
Зависание приложений с точки зрения операционной системы
Борьба с зависаниями приложений
В предыдущей статье данного цикла мы рассмотрели основные причины появления утечек памяти, а также привели рекомендации по корректному выделению памяти и ресурсов Windows, включая рекомендации для кода на С/С++, управляемого кода и клиентского кода веб-приложений.
Следующая тема, которая имеет непосредственное отношение к стабильности как приложений, так и самой системы, — это зависание приложений.
Зависание приложений с точки зрения операционной системы
По результатам многочисленных исследований, зависание приложений является второй после сбоев приложений причиной недовольства пользователей — они ожидают от приложений адекватной реакции на производимые ими действия и готовы ждать ответной реакции не более 5 с. Несмотря на то что приложение может быть занято выполнением каких-то вычислений или ожидать завершения операции ввода-вывода, в ряде случаев приложения просто перестают реагировать на команды пользователей.
Существует множество причин зависания приложений, и не все из них приводят к появлению пользовательского интерфейса, не реагирующего на команды, но основные усилия разработчиков системы направлены как раз на обеспечение отклика приложения и возможность исправления такой ситуации. Операционная система Windows автоматически обнаруживает такие приложения, собирает отладочную информацию и, при необходимости, принудительно завершает или перезапускает зависшие приложения. В ряде случаев пользователю может потребоваться либо завершение связанного с приложением процесса через Task Manager, либо даже перезапуск операционной системы.
Рассмотрим зависание приложения с точки зрения работы операционной системы. Когда один из потоков приложения создает окно на рабочем столе, то использует сервисы Desktop Window Manager (DWM) для обработки сообщений, приходящих этому окну. DWM помещает сообщения (события, связанные с манипуляцией мышью, вводом символов с клавиатуры, сообщения от других окон и т.п.) в очередь сообщений данного потока. Поток извлекает сообщения из очереди и обрабатывает их. Если поток не обслуживает очередь сообщений, вызывая функцию GetMessage(), окно «зависает» — оно не может ни перерисовать себя, ни принять команды от пользователя. Операционная система определяет состояние потока, прикрепляя таймер к сообщениям, находящимся в очереди. Если сообщение не было извлечено из очереди в течение 5 с, то DWM считает, что окно зависло. Для определения состояния окна следует использовать функцию IsHungAppWindow().
Нахождение зависшего окна — это лишь первый шаг к возможному решению проблемы. Пользователь все еще может завершить приложение нажатием кнопки Х, в результате чего окну будет послано сообщение WM_CLOSE, которое также попадет в очередь сообщений и застрянет там вместе с другими необработанными сообщениями. Desktop Window Manager пытается скрыть зависшее окно — вместо него отображается графическое изображение копии окна (оно называется window ghosting feature) c заголовком, содержащим надпись Not Responding. До тех пор пока поток, отвечающий за окно, не извлечет сообщения из очереди, DWM обрабатывает оба окна — оригинальное и его копию, но при этом позволяет пользователям взаимодействовать только с копией окна. Используя такое окно, пользователь может передвигать его, варьировать его размер, попытаться закрыть приложение, но не может изменить его внутреннее состояние.
Desktop Window Manager выполняет еще одну операцию за счет интеграции с механизмом Windows Error Reporting, при этом у пользователей появляется возможность не только завершить зависшее приложение, а иногда и перезапустить его, но и послать отладочную информацию на специальный сайт, поддерживаемый компанией Microsoft. Для получения возможности собирать данные для своих приложений разработчики должны подписаться на соответствующий сервис на сайте Winqual.
В Windows 7 добавлен еще один шаг: операционная система анализирует зависшее приложение и в ряде случаев позволяет пользователю завершить операцию, заблокировавшую приложение, и таким образом продолжить нормальную работу с ним. В текущей версии операционной системы поддерживается принудительное завершение заблокированных вызовов на уровне сокетов — в последующих версиях операционной системы будет поддерживаться большее число операций, которые могут быть принудительно завершены для разблокировки приложений.
Для того чтобы ваше приложение максимально корректно выходило из различных ситуаций, связанных с зависанием, нужно использовать следующие технологии, доступные как в Windows Vista, так и в Windows 7:
- убедитесь в том, что приложение поддерживает механизм Application Restart and Recovery — корректно зарегистрированное приложение может быть автоматически перезагружено при практически полном сохранении данных. Этот механизм работает как при зависании приложений, так и при сбоях в работе приложений;
- получайте информацию о частоте сбоев, а также о деталях каждого сбоя, произошедшего в вашем приложении, на сайте Winqual.
Предусмотрена возможность отмены создания графической копии зависшего окна — для этого следует использовать функцию DisableProcessWindowsGhosting(). Обратите внимание, что в данном случае пользователь не сможет закрыть и перезапустить зависшее приложение.
Борьба с зависаниями приложений
Как мы уже отметили, операционная система считает интерактивное приложение зависшим, если оно не обрабатывает сообщения из своей очереди более 5 с. Причинами зависания приложений могут быть как тривиальные ошибки, так и более глубокие, системные процессы. В любом случае пользователи должны получать приложения, которые максимально оперативно откликаются на команды. Далее приведены некоторые рекомендации по предотвращению зависания приложений:
- убедитесь в том, что пользователи могут отменять операции, выполнение которых занимает более одной секунды, и/или производите операции в фоновом режиме и при необходимости отображайте ход длительных операций (рис. 1);
Рис. 1. Отображение хода операции
- по возможности выполняйте длительные операции или операции, которые могут заблокировать интерфейс приложения, как фоновые задачи, помещаемые в очередь, — это может потребовать реализации механизма обмена сообщениями между потоком, отображающим интерфейс, и другими потоками;
- сделайте код интерфейса вашего приложения максимально простым — по возможности не применяйте в нем вызовы функций, которые могут заблокировать интерфейс;
- отображайте окна и диалоговые панели только тогда, когда они полностью заполнены информацией. Например, если диалоговая панель отображает информацию, для сбора которой требуется определенное время, сначала покажите упрощенный вариант диалоговой панели, а затем, по завершении сбора основной информации, обновите содержимое панели. Примером такого подхода может служить диалоговая панель свойств папки в Windows Explorer. В ней отображаются данные об общем размере файлов в папке — эти данные требуют некоторого времени для вычисления. Диалоговая панель отображает основные данные о папке, а поля Size и Size on disk заполняются после сбора данных из рабочего потока (рис. 2).
Рис. 2. Диалоговая панель Folder Properties
Рассмотрим некоторые рекомендации по снижению вероятности зависания приложений более подробно. Начнем с упрощения кода, отвечающего за пользовательский интерфейс.
Поток, отображающий пользовательский интерфейс, в первую очередь отвечает за обработку сообщений. Любые другие действия, выполняющиеся в данном потоке, могут привести к задержкам в реакции на команды пользователя и, потенциально, к зависанию интерфейса.
При дизайне интерфейса приложения используйте следующие подходы:
- перенесите код, выполнение которого занимает существенное время, в рабочие потоки;
- идентифицируйте вызовы функций, которые могут заблокировать работу интерфейсного потока, и постарайтесь перенести их в другие рабочие потоки; при просмотре кода обращайте внимание на функции, вызывающие код в других динамически загружаемых библиотеках, — такие функции должны быть выведены из интерфейсного потока в первую очередь;
- выведите из интерфейсного потока все операции ввода-вывода и вызовы сетевых функций — эти функции могут блокировать приложения на период от нескольких секунд до нескольких минут. Если в интерфейсном потоке требуется выполнение операций ввода-вывода, используйте асинхронные операции ввода-вывода;
- обратите внимание на то, что интерфейсный поток также обслуживает все COM-серверы с моделью single-threaded appartment (STA), применяемые вашим приложением. Если приложение запустит «долгую» операцию, эти COM-серверы не будут доступны до возобновления обработки сообщений из очереди сообщений.
При проектировании интерфейса обращайте внимание на следующие потенциальные причины, которые могут привести к зависанию приложений:
- не ожидайте завершения работы объектов уровня ядра (типа событий и мьютексов) дольше, чем минимально допустимый отрезок времени, — если вам все же необходимо дождаться завершения работы этих объектов, используйте функцию MsgWaitForMultipleObjects(), которая выведет поток из заблокированного состояния после получения нового сообщения;
- не применяйте функцию AttachThreadInput() для распределения очереди сообщений между несколькими потоками — синхронизация доступа к очереди сообщений реализуется с помощью сложных алгоритмов, что в конечном счете может помешать Windows корректно определить зависшее окно;
- не используйте функцию TerminateThread() для завершения рабочих потоков — при таком завершении могут остаться бесхозные синхронизационные объекты, блокировки и сигнальные события;
- не вызывайте из интерфейсного потока код неизвестного происхождения — эта рекомендация в первую очередь относится к приложениям, поддерживающим модель расширения, — нет полной гарантии того, что разработчики расширений для вашего приложения придерживаются основных принципов написания приложений, эффективно реагирующих на команды пользователей;
- не применяйте функцию SendMessage(HWND_BROADCAST) для передачи сообщений — любое приложение, которое некорректно обработает полученное сообщение, может заблокировать ваше приложение.
Вторая группа рекомендаций относится к использованию асинхронных операций. Исключение из интерфейсного потока операций, выполнение которых занимает значительное время или может заблокировать интерфейс, требует применения асинхронных коммуникаций с потоками, куда такие операции будут перенесены. Вот несколько рекомендаций по реализации асинхронных операций:
- в потоке, который отвечает за интерфейс приложения, используйте асинхронные коммуникации — по возможности замените вызовы функции SendMessage() на подходящие функции — PostMessage(), SendNotifyMessage() или SendMessageCallback() — это позволит снизить вероятность блокировки вашего приложения;
- применяйте фоновые потоки для выполнения операций, занимающих существенное время, или для задач, которые могут привести к блокировке приложения. Для создания рабочих потоков используйте новые программные интерфейсы — механизм пула потоков (thread pool). С помощью механизма пула потоков можно создавать коллекции рабочих потоков, способных эффективно обрабатывать асинхронные косвенные вызовы (asynchronous callbacks), получаемые приложениями. Пул потоков применяется для снижения числа прикладных потоков и более эффективного управления рабочими потоками. Приложения, использующие соответствующие программные интерфейсы (см. ниже), могут создавать очереди рабочих потоков, ассоциировать задачи со ссылками ожидания (waitable handles), заполнять очереди по таймеру, связывать очереди с процессами ввода-вывода и т.п. Приложения могут применять пул потоков для реализации следующих сценариев:
- приложения могут параллельно распределять выполнение задач в виде множества небольших асинхронных элементов, например при выполнении распределенных запросов к индексам или сетевых операций,
- использование пула потоков может упростить задачу управления потоками для приложений, создающих и управляющих большим числом потоков, каждый из которых существует относительно короткое время,
- приложения могут применять пул потоков для параллельного выполнения фоновых задач;
- обеспечьте возможность принудительного завершения операций, выполнение которых занимает длительное время. Для операций ввода-вывода, которые могут заблокировать приложение, применяйте функции ввода-вывода с возможностью отмены (I/O Cancellation). Эти фукции обеспечивают возможность завершения запросов на операции ввода-вывода, которые могут привести к повышенному использованию недоступных в данный момент ресурсов. Примерами таких функций являются CancelSynchronousIo() и CancelIoEx(). Отметим, что применение механизмов отмены операций ввода-вывода позволяет решить ряд проблем с такими операциями без принудительного завершения потоков и приложений;
- для реализации асинхронных операций в коде на .NET используйте интерфейс IAsynchResult или класс Events.
Еще одним потенциальным источником блокировки вашего приложения может стать некорректный дизайн обработчиков ошибок и исключений. Обработка исключений позволяет разделить логику программы на две части: работу в штатном режиме и обработку ошибок. За счет этого разделения не всегда удается узнать точное состояние приложения непосредственно перед возникновением исключения, а обработчик исключения не всегда получает информацию, необходимую для восстановления состояния приложения для продолжения штатной работы после обработки ошибки. Это особенно важно в тех случаях, когда приложение применяет блокировки (locks), которые должны быть сняты в обработчике ошибки для предотвращения потенциальных дополнительных блокировок.
Вот несколько рекомендаций по корректной обработке ошибок и исключительных ситуаций:
- не используйте блоки —try/—except и функцию SetUnhandledExceptionFilter();
- при применении исключений на уровне С++ используйте шаблоны типа auto_ptr для блокировок — блокировки должны быть сняты в деструкторе класса. Для обычных исключений освобождайте блокировки в блоке —finally;
- обращайте особое внимание на код, который выполняется в обработчике исключения — в момент возникновения исключения ваше приложение уже может применять ряд блокировок, не добавляйте новые в коде обработчика исключения;
- не обрабатывайте исключения без необходимости. Если вы используете обработчики стандартных исключений для сбора данных, рассмотрите возможность заменить их механизмом Windows Error Reporting;
- не применяйте исключения на уровне С++ в потоке, отвечающем за интерфейс приложения.
Как мы уже отметили, на уровне операционной системы существует механизм Application Restart and Recovery, позволяющий перезапустить зависшие приложения или приложения, блокирующие какие-либо ресурсы без перезапуска самой операционной системы. О нем пойдет речь в следующих статьях данного цикла.
КомпьютерПресс 12’2009
Распределенное обучение с TensorFlow и Python
AI_Generated 05.05.2025
В машинном обучении размер имеет значение. С ростом сложности моделей и объема данных одиночный процессор или даже мощная видеокарта уже не справляются с задачей обучения за разумное время. Когда. . .
CRUD API на C# и GraphQL
stackOverflow 05.05.2025
В бэкенд-разработке постоянно возникают новые технологии, призванные решить актуальные проблемы и упростить жизнь программистам. Одной из таких технологий стал GraphQL — язык запросов для API,. . .
Распознавание голоса и речи на C#
UnmanagedCoder 05.05.2025
Интеграция голосового управления в приложения на C# стала намного доступнее благодаря развитию специализированных библиотек и API. При этом многие разработчики до сих пор считают голосовое управление. . .
Реализация своих итераторов в C++
NullReferenced 05.05.2025
Итераторы в C++ — это абстракция, которая связывает весь экосистему Стандартной Библиотеки Шаблонов (STL) в единое целое, позволяя алгоритмам работать с разнородными структурами данных без знания их. . .
Разработка собственного фреймворка для тестирования в C#
UnmanagedCoder 04.05.2025
C# довольно богат готовыми решениями – NUnit, xUnit, MSTest уже давно стали своеобразными динозаврами индустрии. Однако, как и любой динозавр, они не всегда могут протиснуться в узкие коридоры. . .
Распределенная трассировка в Java с помощью OpenTelemetry
Javaican 04.05.2025
Микросервисная архитектура стала краеугольным камнем современной разработки, но вместе с ней пришла и головная боль, знакомая многим — отслеживание прохождения запросов через лабиринт взаимосвязанных. . .
Шаблоны обнаружения сервисов в Kubernetes
Mr. Docker 04.05.2025
Современные Kubernetes-инфраструктуры сталкиваются с серьёзными вызовами. Развертывание в нескольких регионах и облаках одновременно, необходимость обеспечения низкой задержки для глобально. . .
Создаем SPA на C# и Blazor
stackOverflow 04.05.2025
Мир веб-разработки за последние десять лет претерпел коллосальные изменения. Переход от традиционных многостраничных сайтов к одностраничным приложениям (Single Page Applications, SPA) — это. . .
Реализация шаблонов проектирования GoF на C++
NullReferenced 04.05.2025
«Банда четырёх» (Gang of Four или GoF) — Эрих Гамма, Ричард Хелм, Ральф Джонсон и Джон Влиссидес — в 1994 году сформировали канон шаблонов, который выдержал проверку временем. И хотя C++ претерпел. . .
C# и сети: Сокеты, gRPC и SignalR
UnmanagedCoder 04.05.2025
Сетевые технологии не стоят на месте, а вместе с ними эволюционируют и инструменты разработки. В . NET появилось множество решений — от низкоуровневых сокетов, позволяющих управлять каждым байтом. . .
Привет, друзья. В этой публикации поговорим о такой теме, как зависание программ в среде Windows. Почему зависают компьютерные программы и игры? По разным причинам сия неприятность может происходить – по причинам, кроющимся в самих программах, по причинам проблемной работы Windows, из-за слабой аппаратной начинки ПК или ноутбука, которая неспособна справиться с нагрузками программ и игр, из-за перегрева или выхода из строя компьютерных составляющих и т.д. Ниже мы рассмотрим основные причины, которые провоцируют зависание программ и игр. И также рассмотрим способы устранения этих причин.
Зависание программ
Итак, друзья, проблемные программы и игры, из-за которых наш компьютер виснет. В играх зависание чаще всего происходит в виде фризов (от анл. freeze — замораживание) – состояний временного зависания изображения и звука чаще всего из-за нехватки мощности аппаратных ресурсов, а также по прочим причинам. Программы из-за нехватки аппаратных ресурсов, из-за своих проблем и проблем Windows могут вызывать зависание только своё, либо всего компьютера. Если зависла только одна программа, здесь всё просто – мы завершаем её работу, в крайнем случае с помощью диспетчера задач. А что делать, если программа спровоцировала зависание всего компьютера? Если система не выйдет из ступора сама, возможно, нам придётся её выводить с помощью горячей перезагрузки. Но прежде давайте попытаемся убрать причинную программу, чтобы не прибегать к горячей перезагрузке. Пробуем запустить диспетчер задач Windows клавишами Ctrl+Shift+Esc, либо вызываем меню на экране блокировки клавишами Ctrl+Alt+Del и в этом меню пробуем запустить диспетчер задач.
В диспетчере задач смотрим графу «Состояние», в ней для зависшей программы будет указано состояние «Не отвечает». Это, кстати, друзья, способ выявить программу, провоцирующую зависание всего компьютера, если она неизвестна, например, если это фоновая какая-то программа. Можно попробовать возобновить работу Windows, закрыв зависшую программу через снятие её задачи.
Если не получится, жмём Ctrl+Alt+Del и программно перезагружаем компьютер.
Если не получается, тогда уже прибегаем к аппаратной горячей перезагрузке.
Ну а теперь, друзья, давайте разбираться в причинах зависания игр и программ.
Проблемные программы и игры
Раз мы говорим о зависании программ, то первостепенной причиной и рассмотрим проблемы самих программ и игр. Далее по тексту будем говорить о программах, но подразумевать будем и непосредственно программы, и игры как вид программного обеспечения.
В первую очередь отмечу, конечно же, взломанные программы с торрент-трекеров — так называемые репаки, переупакованные программы, которые «пролечены» от необходимости лицензионной регистрации. Из-за несанкционированного вмешательства автора репака в файлы программы она может работать сбойно. И здесь вы никому не вправе предъявить претензии – ни создателю программы, ни компании Microsoft, ни автору репака. Такие программы вы устанавливаете в Windows незаконно, на свой страх и риск. Можно попробовать переустановить репак – удалить его с зачисткой остатков специальной программой-деинсталлятором (например, IObit Uninstaller) и установить заново. Если это не поможет, максимум, что вы можете сделать – это обратиться к автору репака на торрент-трекере или на его сайте с описанием вашей проблемы и просьбой исправить её. Не факт, но возможно, что автор исправит проблему и перезальёт торрент-раздачу репака. Но в идеале, конечно же, лучше перейти на официальную версию программы. Практически весь лицензионный софт сейчас предлагается нам в бесплатных триал-версиях. И, в принципе, даже минимального триал-срока 10 дней может хватить, чтобы мы поюзали программу и убедились, что она корректно работает в среде нашей операционной системы, конкретно на нашем железе.
Увы, но не всегда и официальные программы работают корректно. Особенно те, что часто обновляются. Каждое обновление программы – это потенциальный риск, что она будет сбойно работать в какой-то из поддерживаемых версий Windows. Работу разработчикам ПО усложняет фрагментация выпусков Windows – версии 7, 8.1 и 10, выпуски для 32- и 64-битной архитектуры. А у Windows 10 же ещё и каждые полгода меняется версия, связанная с внедрением функциональных обновлений. Каждые полгода разработчикам нужно следить, чтобы их софт нормально работал в каждой новой версии Windows 10 для каждой из архитектур. Многие разработчики бесплатных программ, не получая выгод со своих детищ, забивают на них или в лучшем случае изредка вносят корректировки в работу программ. Но вне зависимости от типа лицензии любая программа при обновлении может сбоить из-за недоработок или плохой вытестированности. Как и может начать сбоить старая версия программы, работая в условиях обновлённой операционной системы. Что в этом случае можно предпринять? Переустановить программу, т.е. удалить её (опять же, с зачисткой остатков) и установить по новой. При новой установке можно попробовать новую версию или, наоборот, старую. Также, если у вас 64-битная Windows, а программа предусматривает выпуски х32 и х64, можете попробовать выпуск с другой архитектурой. Старые программы можно попробовать запустить в режиме совместимости со старшими версиями Windows. Ещё вы можете зайти сайт программы, возможно, там есть FAQ или форум по решению её багов. Ну и, конечно же, поищите по запросу зависания вашей программы решения в Интернете.
Многие программы могут работать нестабильно, если у вас не установлена актуальная версия программных платформ .NET Framework, Visual C++, DirectX. Ну или в работе этих платформ есть проблемы. Как минимум обновите эти программные платформы, если у вас в Windows установлены их неактуальные версии.
Обновление до Windows 10
Программы, ранее работавшие нормально, могут начать сбоить и зависать из-за некорректного обновления Windows 10 до новой версии. Можно попробовать для начала их переустановить или обновить. Если это не даст результата, нужно откатываться к прежней версии Windows 10. Сделать это можно только первое время после обновления. Как откатить Windows 10 к прежней версии, смотрите в статье «Как правильно устанавливать функциональные обновления Windows 10».
Программы, установленные не на диске С
Очень редко, но бывает так, что программы некорректно работают и зависают по той причине, что установлены они не на диске С, как это принято обычно, а на другом разделе жёсткого диска – на D, E, F и т.п. Т.е. если вы сами указали не диск С, а другой, при установке программы, очевидно, из-за отсутствия лишнего места на диске С. В таком случае нужно программу удалить (опять же, с зачисткой остатков) и установить на диск С.
Проблемы компьютера
Зависание программ могут причинять проблемы компьютера — проблемы в работе Windows, аппаратные неполадки, несоответствие мощности комплектующих компьютера требованиям программ и игр, вирусы и т.п. В таких случаях программы, из-за которых происходит зависание, могут просто выступать в роли катализатора проблемы. Они создают определённую нагрузку, в ходе которой и выявляются системные или аппаратные проблемы.
Если у вас зависает ресурсоёмкая программа, посмотрите в Интернете её системные требования, возможно, ваш компьютер работает на грани своих аппаратных возможностей или даже не доходит до этой грани, зависая. Если у вас зависает видеоредактор или видеоконвертер при рендеринге видео, возможно, у вас чрезмерно слабый для таких задач процессор. Покопайтесь в настройках вашего видеоредактора или видеоконвертера, может быть там есть возможность применения технологий аппаратного ускорения видеокарт. Если нет, используйте видеоредакторы или видеоконвертеры, которые такие технологии предусматривают.
А, возможно, друзья у вас запущено две или более ресурсоёмких программы, с которыми компьютер не справляется. Работайте только с одной ресурсоёмкой программой, закройте все другие программы, в том числе фоновые, которые могут давать нагрузку на аппаратную часть компьютера.
Ну а что касается других причин зависания программ по вине Windows или компьютерного железа, смотрите статью сайта «Зависание компьютера». В ней дательно рассмотрены проблемы перегрева и неполадок комплектующих компьютера, проблемы некачественной сборки Windows и конфликта антивирусов. И также, друзья, посмотрите статью «Компьютер стал медленно работать». В ней описаны причины, которые могут замедлить работу компьютера, но также эти причины могут провоцировать и зависание программ. Это такие причины как: ошибки файловой системы Windows, недостаток места на диске С, ресурсоёмкий антивирус, проблемные драйверы, вирусы и прочий вредоносный софт. А ещё, если у вас слабое компьютерное железо, в этой статье вы найдёте полезные рекомендации как то: как протестировать компьютер, насколько он мощный; как лучше выживать на слабом компьютере; как недорого сделать апгрейд базового железа; а главное – как недорого приобрести современный компьютер хорошей производительности.
Фризы в играх
Ну и под конец публикации, друзья, несколько слов о фризах. Почему игры фризят? В основном по таким причинам как:
-
Слабое компьютерное железо;
-
Блок питания недостаточной мощности;
-
Некорректно работающие драйвера компьютерных комплектующих, в частности, видеокарты;
-
Бэд-блоки и прочие неполадки жёсткого диска;
-
Неисправная оперативная память.
Как бороться с этими проблемами вы найдёте в упомянутых в предыдущем пункте статьях сайта. Что же касается конкретно игр, если они фризят, сделайте ниже настройки и посмотрите наши рекомендации касательно прочих настроек компьютера под игры в статье «Как увеличить FPS в играх». И также, друзья, можете попробовать процедуры, описанные для проблемы слёта драйвера видеокарты в статье сайта «Видеодрайвер перестал отвечать и был успешно восстановлен».
Столкнулся с не очень приятной проблемой. Дико тормозит Windows 7: установлена на SSD, но такое ощущение, что на самом деле на старый древный сыпящийся HDD. Загрузка занимает минуты две, открытие браузера минуту, окна при открытии лагают, прорисовываются просто годами, в общем, просто какая-то дичь творится. Конфигурация системы: i3-2100, 4 гб RAM в двухканале, SSD на 240 гб от Kingston.
Прошёлся по основным возможным проблемам: вирусов, майнеров нет, автозагрузка, планировщик, службы — чистые, SSD в порядке, проверял crystaldisk mark-ом, оперативка не битая, биос последний, перегрева и троттлинга нет, режим работы диска AHCI, в логах системы ничего выделяющегося тоже нет. Понятное дело что с вероятностью 99,99% этот компьютер ждёт переустановка системы и с той же вероятностью это исправит все тормоза и лаги. Но в чём-то же должна быть причина? Есть какие-то идеи?
-
Вопрос задан
-
19611 просмотров