|
Программирование >> Программирование с использованием ajax
Сборка мусора Одной из наиболее важных функциональных возможностей управляемого кода является средство сборки мусора (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).
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |