error-handling - элемента - контент-менеджер. информационные блоки ответы




Как справиться с сценариями «полный диск»? (8)

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

Подавляющее большинство приложений не обрабатывают сценарии «полный диск» должным образом.

Пример: установщик не видит, что диск заполнен, игнорирует все ошибки и, наконец, счастливо объявляет о завершении установки! Или программа электронной почты не знает, что сообщение, которое оно только что загрузило, не может быть сохранено и сообщает серверу для удаления оригинала.

Какие методы должны обрабатывать эту ситуацию изящно? Вы используете их? Вы проверяете их?


Вы совершенно правы. Программное обеспечение должно обрабатывать грамотно такую ​​ситуацию.

Вы всегда можете проверить исключение IOException, чтобы узнать, заполнен ли диск или у пользователя есть права на запись в это место.

SQL Server справляется с этой ситуацией, но не восстанавливается. Когда диск заполнен, он перестает работать. :)


Я проверяю наличие ошибок при открытии, записи или закрытии файла. С другой стороны, я не делаю ничего, в частности, для обработки ошибок «полного диска». Вместо этого я полагаюсь на базовую ОС, чтобы сообщать обо мне эти ошибки, так же, как она сообщает о любых других типах ошибок.


Я работаю с программным обеспечением для сбора данных. Поскольку я могу оценить размер файла, прежде чем я его создам (исходя из объема данных, которые требуется получить), я предупреждаю даже до того, как я создам файл в зависимости от того, сколько дискового пространства существует, если я ожидаю, что у меня закончится комната ,


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

В общем, я игнорирую внедисковое пространство так же, как игнорирую вне памяти. Отчасти потому, что невозможно надежно предсказать эти условия. Отчасти потому, что, когда мы говорим о поведении программного обеспечения в неожиданных условиях (например, ошибка, которую вы не знаете, у вас есть, что заставляет вас есть весь диск или память), невозможно правильно рассуждать о ситуации, чтобы закодировать ее И ИСПЫТАТЬ ЭТО. (Можно с уверенностью предположить, что если у вас есть код, который не протестирован, он не работает).

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

  • Если вы держите важные, несохраненные, пользовательские состояния (например, текстовый файл с некоторыми изменениями), подумайте о предварительном сохранении данных в фоновом режиме, чтобы впоследствии аварийный сигнал был восстановлен.

  • Если вы собираетесь записывать на диск на основе интерактивной пользовательской команды (например, File-> Save), вы можете поймать провал и предложить, чтобы они снова попробовали.

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


Мы просто добавили поддержку для этого в наш продукт. Находясь на встроенном устройстве, мы проверяем дисковое пространство ниже 20% (10 МБ) каждый час и передаем предупреждения на офисный сервер, регистрируем проблему и предупреждаем пользователя.

Как только в этом состоянии мы проверяем каждые две минуты пространство под 2 МБ и изящно останавливаем приложение (систему наведения) и отказываемся работать до тех пор, пока проблема пространства не будет решена.

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


Да, это, наверное, очень плохая идея - попытаться сделать что-то «умное» в этой проблеме. В основном больше всего вы можете попытаться минимизировать потерю. Для интерактивных приложений с несохраненными пользовательскими данными старайтесь избегать сбоев, прежде чем пользователь сможет решить проблему.


Если я пишу приложение, я могу его каким-то образом восстановить из-за сбоя ввода-вывода, но если я запускаю чужое приложение, я должен принять другой подход, который должен восстановить как можно больше места на диске , Это метод, который я использую. Могут быть большие объемы восстанавливаемого дискового пространства в виде 1) небольшого количества больших файлов, скрытых глубоко в неясных каталогах, или 2) большого количества небольших файлов, рассеянных по диску, снова в неочевидных местах. Этот метод находит их в любом случае.





diskspace