Программирование >>  Программирование с использованием ajax 

1 2 3 4 [ 5 ] 6 7 8 ... 396


Сборка мусора

Одной из наиболее важных функциональных возможностей управляемого кода является средство сборки мусора (garbage collection). Оно гарантирует в .NET уверенность в полном очищении использованной приложением памяти после завершения его эксплуатации. До появления .NET об этом по большей части нужно было заботиться самим программистам, и даже несколько простых ошибок в коде могли приводить к таинственному исчезновению крупных блоков памяти в результате их выделения в неправильном месте. Это обычно выливалось в постепенное замедление работы компьютера и в конечном итоге завершалось полным крахом системы.

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

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

Что получается в итоге

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

1. Сначала пишется код приложения с использованием совместимого с .NET языка, вроде С# (рис. 1.1).


Рис, 1,1. Написание кода приложения с использованием языка С# 2. Далее этот код компилируется в MSIL-код, который сохраняется в сборке (рис. 1.2)


Рис. 1.2, Компиляция кода приложения в MSIL-код и сохранение его в сборке

3. При первом запуске этого кода (в результате либо запуска его родного исполняемого файла, либо его запрашивания из другого кода) он первым делом компилируются в родной код с помощью JIT-компилятора (рис. 1.3).



Сборка

ЛТ-компиляция

Родной код

Рис. 1.3. Компиляция MSIL-Kod в родной код с помощью JIT-компиляшора

4. После этого родной код выполняется в контексте управляемой CLR вместе со всеми остальными запущенными приложениями или процессами, как показано на рис. 1.4.

Исполняющая среда системы

CLR-среда .NET

Родной код

Родной код

J

Родной код

Рис. 1.4. Выполнение родного кода в контексте CLR

Связывание

Обратите внимание на один дополнительный аспект в описанном процессе. Код С#, который на втором шаге компилируется в MSIL-код, вовсе не обязательно должен содержаться в одном файле. Код приложения может разбиваться на несколько файлов исходного кода, которые затем компилируются вместе в одну сборку. Этот процесс является чрезвычайно полезным и называется связыванием (linking). Дело в том, что с несколькими небольшими файлами гораздо проще работать, чем с одним огромным. Разработчик может выделять логически связанный код в отдельный файл, так чтобы поработать над ним отдельно, а затем по завершении практически забыть об этом. Такой подход еще и упрощает поиск конкретных фрагментов кода, когда в них возникает необходимость, и позволяет командам разработчиков делить связанную с программированием работу на отдельные приемлемые куски, т.е. распределять подлежащие обработке фрагменты кода без подвергания риску готовых разделов кода или разделов, над которыми работают другие.

Что собой представляет язык С#

Язык С#, как уже упоминалось ранее, является одним из тех, которые можно использовать для создания приложений, подлежащих запуску в .NET CLR. Он эволюционировал из языков С и С++ и был создан Microsoft специально для работы с платформой .NET. Благодаря тому, что язык С# разрабатывался недавно, в его состав вошли многие из наилучших функциональных возможностей других языков, но без присущих им проблем.



Разрабатывать приложения с помощью языка С# легче, чем с помощью С++, потому что синтаксис этого языка является более простым. Однако при этом С# все равно остается мощным языком, и существует очень мало вещей, которые может потребоваться делать на С++ из-за того, что их нельзя сделать на С#. Несмотря на это, те функциональные возможности языка С#, которые предлагаются параллельно более усовершенствованным функциональным возможностям языка С++, вроде прямого получения доступа к системной памяти и манипулирования ею, могут реализоваться только применением кода с пометкой unsafe. Этот усовершенствованный прием программирования является потенциально опасным (о чем и говорит ключевое слово unsafe), поскольку существует вероятность перезаписывания критических для системы блоков памяти. По этой и некоторым другим причинам он в настоящей книге не рассматривается.

Иногда код на С# является немного более многословным, чем на С++. Объясняется это тем, что С# (в отличие от С++) представляет собой безопасный к типам (type-safe) язык. Если выразиться просто, это означает, что после присваивания типу каких-то данных он уже далее не может преобразовываться в другой несвязанный тип. Следовательно, к преобразованию между типами должны применяться строгие правила, из-за чего для выполнения той же самой задачи на С# часто требуется писать больше кода, чем на С++, но, тем не менее, это дает определенные преимущества: код получается более надежным, процесс отладки - более простым, а .NET может всегда в любое время определить тип того или иного фрагмента данных. Таким образом, в С# невозможно делать, например, следующее: взять область памяти размером 4 байта под данные длинной 10 байтов и интерпретировать это как X; однако это вовсе не является недостатком.

Язык С# представляет собой лишь один из многих языков, доступных для разработки .NET-приложений, но, несомненно, является наилучшим из них. Его главное преимущество состоит в том, что он единственный с самого начала разрабатывался специально для .NET Framework и из-за этого может быть главным кандидатом на использование в тех версиях .NET, которые переносятся на другие операционные системы. Чтобы языки вроде .NET-версии Visual Basic оставались насколько возможно похожими на своих предшественников и при этом совместимыми с CLR, некоторые средства из библиотеки кода .NET в них поддерживаются не полностью. В отличие от них, С# позволяет пользоваться каждым из тех средств, которые предлагаются в этой библиотеке. В состав последней версии .NET было добавлено несколько улучшений для языка С#, частично по просьбам конечных разработчиков, что существенно увеличивает его мощность.

Приложения, которые можно писать на С#

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

□ Приложения Windows. К приложениям этого типа относятся приложения, которые имеют знакомый пользователям Windows внешний вид и поведение, как, например, приложение Microsoft Office. Достигается такой внешний вид и поведение применением модуля .NET Framework под названием Windows Forms (Формы Windows), по сути, представляющего собой библиотеку элементов управления (вроде кнопок, панелей инструментов, меню и т.п.), с помощью которых можно создавать пользовательский интерфейс Windows (UI).



1 2 3 4 [ 5 ] 6 7 8 ... 396

© 2006 - 2022 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика