Четвертый факт: ASP.NET обслуживается средой CLR

Пожалуй, наиболее важным аспектом механизма ASP.NET является то, что функционирует он внутри исполняющей среды CLR. Все части .NET Framework — т.е. все пространства имен, приложения и классы — называются управляемым кодом.

Автоматическое управление памятью и сборкой мусора. При каждом создании в приложении экземпляра объекта ссылочного типа CLR выделяет для него в памяти соответствующее пространство в управляемой куче. Вручную очищать это пространство в памяти никогда не потребуется. При выходе ссылки на объект за пределы области видимости (или завершении работы приложения) объект сразу же становится доступным для сборщика мусора. Сборщик мусора периодически запускается внутри CLR и автоматически восстанавливает неиспользуемую память, которую занимают более недоступные объекты. Подобная модель избавляет от необходимости иметь дело с низкоуровневыми деталями манипулирования памятью в C++ и запутанного подсчета ссылок в СОМ.

Безопасность типов. При компиляции приложения .NET добавляет в сборку сведения о доступных классах, их членах, типах данных и т.д. Это позволяет использовать их в других приложениях без добавления дополнительных файлов поддержки, а компилятору — удостоверяться в правильности вызова во время выполнения. Такой дополнительный уровень безопасности полностью исключает вероятность возникновения целого ряда низкоуровневых ошибок.

Расширяемые метаданные. Информация о классах и членах является только одним из типов метаданных, которые .NET может сохранять в скомпилированной сборке. Метаданные описывают код и позволяют предоставлять дополнительную информацию исполняющей среде и другим службам. Например, эти метаданные могут указывать отладчику, как следует выполнять трассировку кода, или же сообщать Visual Studio о том, как во время проектирования должен отображаться какой-то специальный элемент управления. Они также могут использоваться для активизации других служб во время выполнения, например, запуска транзакций или пула объектов.

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

Многопоточность. Среда CLR предоставляет пул потоков, которые различные классы могут использовать. Например, можно вызывать методы, считывать файлы и взаимодействовать с веб-службами асинхронным образом, не создавая явно никаких новых потоков. На рис. 1.2 показано высокоуровневое представление CLR и .NET Framework.

Рис. 1.2. CLR и .NET Framework