среда, 28 марта 2012 г.

Идиомы. Нейтральный к исключениям код на C#.

Под нейтральным к исключениям кодом понимается такой код, в котором не предумотрена явная обработка возможных исключений (try/catch) и который при этом в состояние справиться с возникшими исключениями.

В основе написания нейтрального к исключениям кода лежит идея, похожая на идею транзаций (commit/rollback) - фиксация изменений или откат всех действий и восстановление первоначального состояния объектов в случае возникновения исключения.

Реализация подобной схемы дает несколько преимуществ:
1) Улучшение читабельности кода за счет отсутствия конструкций try/catch/finnally.
2) Код гарантированно не генерирует исключения после изменения состояния обьектов, что вполне может произойти в блоках catch или finally.
3) Если возникает исключение до изменения состояния обьектов - все изменения откатываются и обьекты остаются в первоначальном состоянии.

Минусы подобной схемы:
1) Снижение эффективностикода во время выполнения за счет большего количества потребляемых системных ресурсов.

Расмотрим пример реализации подобного кода:

воскресенье, 18 марта 2012 г.

Ошибка в Windows 7. BOOTMGR is compressed.

В случае, если система Windows 7 не загружается, выдавая при загрузке ошибку "BOOTMBR is compressed", выполняем следующую последовательность действий:
  1. Загружаемся с диска ERD Commander или любого загрузочного диска.
  2. Переходим в коммандную строку, в которой последовательно набираем:
bootrec /FixMbr
bootrec /FixBoot
bootrec /RebuildBcd
exit
     3. Перезагружаемся с жесткого диска. Все должно работать.

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