Similar presentations:
Платформа Microsoft и язык программирования C#
1.
Платформа Microsoft .NETи язык программирования C#
2.
Платформа Microsoft .NET —это технология, которая
поддерживает создание и
выполнение
приложений различных типов
3.
Причины возникновенияплатформы
Microsoft .NET Framework
4.
Одна из идей Microsoft объединение различныхпрограммных технологий в
унифицированную платформу
5.
Это позволит разрабатыватьприложения различных типов:
• Консольные приложения
• Оконные графические приложения
• Мобильные приложения
• Web-приложения
• Web-сервисы
6.
Важной идеей разработки .NETFramework было стремление
сделать кроссплатформенную
виртуальную машину для
выполнения одного и того же
кода в различных ОС
7.
Но со временем Microsoftограничилась поддержкой
только своих операционных
систем Windows
8.
Поддержкой некоторых другихоперационных систем занимаются
независимые разработчики
9.
Реализация платформы.NETна базе свободного
программного обеспечения
• Проект Mono
• Xamarin.iOS
• DotGNU Portable.NET
• Xamarin.Android
10.
НедостаткиMicrosoft.NET Framework
• Теоретическая
кроссплатформенность
• Более медленное выполнение
программы по сравнению с
программой, написанной не для
.NET Framework
11.
Версии платформы.NET Framework
• 1.0 (1 мая 2002 года)
• 1.1 (1 апреля 2003 года)
• 2.0 (11 июля 2005 года)
• 3.0 (6 ноября 2006 года)
• 3.5 (9 ноября 2007 года)
• 4.0 (12 апреля 2010 года)
• 4.5 (15 августа 2012 года)
• 4.5.1 (17 октября 2013 года)
12.
Версии платформы.NET Framework
• 4.5.2 (5 мая 2014 года)
• 4.5.3 (3 октября 2014 года)
• 4.6 (20 июля 2015 года)
• 4.6.1 (17 ноября 2015 года)
• 4.6.2 (20 июля 2016 года)
• 4.7 (5 апреля 2017 года)
• 4.7.1 (17 октября 2017 года)
• 4.7.2 (30 апреля 2018 года)
• 4.8 (18 апреля 2019 года)
13.
КомпонентыMicrosoft.NET Framework
• Common Language Runtime (CLR) общеязыковая среда исполнения
• Framework Class Library (FCL) библиотека классов .NET Framework
• Common Type System (CTS) стандартная система типов
• Common Language Specification (CLS)
- общая спецификация языка
14.
Common Language Runtime виртуальная программная среда(виртуальная машина) для
исполнения приложений .NET
15.
CLR, в основе которой лежитвиртуальный высокоуровневый
процессор, реализует работу с
памятью, процессами, потоками
и остальным окружением
16.
В частности, среда CLRраспределяет и очищает память,
следит за тем, чтобы выполнялись
только разрешенные операции,
выполняет обработку
возникающих ошибок и т.д.
17.
Виртуальная машина CLRобеспечивает эффективное и
контролируемое исполнение кода
приложений .NET
18.
CLR физически имеет видбиблиотеки mscoree.dll (Common
Object Runtime Execution Engine)
19.
Исходный текст программы,написанный на любом языке
программирования для .NET,
переводится компилятором в
исполняемый файл, который
называется сборкой (.exe или .dll)
20.
Assembly (сборка .NET)21.
Составные части сборки• Код, написанный на
промежуточном языке CIL
(Common Intermediate Language)
• Метаданные
• Манифест
22.
Common Intermediate Language «высокоуровневый ассемблер»виртуальной машины .NET
23.
Common Intermediate Language24.
CIL-код содержит инструкции,независимые ни от языка
программирования, ни от ОС,
ни от процессора
25.
Платформа .NET предлагаетуправляемую среду выполнения
приложений, в основании
которой лежит виртуальный
высокоуровневый процессор
26.
Виртуальный процессорисполняет высокоуровневые
инструкции языка CIL (объектноориентированный код)
27.
Например, высокоуровневаяинструкция создания объекта
класса или инструкция вызова
определенного метода
28.
Метаданные – сведения о том,какие объекты, типы данных,
классы, методы, свойства
используются в сборке
29.
30.
Они позволяют организоватьмежъязыковое
взаимодействие, обеспечивают
безопасность и облегчают
развертывание приложений
31.
Манифест – это сведения осамой сборке (номер версии
сборки, языковые настройки,
список других внешних сборок,
необходимых для нормальной
работы программы и т.д.)
32.
При выполнении сборки (.exe)виртуальная машина CLR использует
JIT-компилятор (Just-In-Time),
который переводит исполняемый
файл на языке CIL в исполняемый
машинно-зависимый код
33.
34.
Схемакомпиляции
приложения
в .NET
Framework
35.
Важно понимать, что сборкатранслируется не целиком, а по
частям по мере необходимости
36.
Уже откомпилированные частипрограммы сохраняются в кэше
для последующего использования
37.
Неделимая единицакомпиляции - функция
38.
Управляемый (безопасный) код –это код, который выполняется
под управлением общеязыковой
среды CLR
39.
Любое приложение, написанноепод .NET Framework – это и есть
управляемый код
40.
Неуправляемый (небезопасныйкод) – это приложение,
написанное не для платформы
.NET Framework (например,
программа на С++
с использованием Windows API)
41.
Платформа .NET предоставляетвозможности для взаимодействия
с неуправляемым кодом
42.
Управляемый и неуправляемый код43.
Таким образом, среда CLRисполняет управляемый CIL-код,
оперируя высокоуровневыми
сущностями (объектами)
44.
В этом заключается идеявысокоуровневого виртуального
процессора
45.
В то же время среда исполнениянеуправляемого кода выполняет
низкоуровневые инструкции
процедурного кода
(машинно-зависимый код)
46.
Машинный код47.
Это главное отличие средыисполнения CLR от среды
исполнения неуправляемого кода
48.
В каждой конкретной сборкеможет содержаться любое
количество различающихся типов
49.
В мире .NET "тип" представляет собойобщий термин, который применяется
для обозначения любого элемента из
множества (класс, интерфейс,
структура, перечисление, делегат,
кортеж, запись)
50.
CTS (общая система типов)описывает все типы и
программные конструкции,
поддерживаемые CLR и
доступные в CIL
51.
Все компиляторы языков,ориентированные на среду .NET,
генерируют CIL-код, который
базируется на CTS
52.
CTS обеспечивает строгуютипизацию данных для
межъязыкового взаимодействия
53.
Например, Integer в VB.NET,int в C# - безопасные типы
отображаются на System.Int32,
а char* - небезопасный тип
54.
CTS (общая система типов)55.
Важно понимать, чтоконкретный язык, совместимый
с .NET, может и не
поддерживать абсолютно все
возможности, определенные CTS
56.
Поэтому важно определить такойнабор типов и программных
конструкций, с которым
гарантированно смогут работать
любые .NET-совместимые языки
57.
Такой набор описываетсяобщеязыковой спецификацией
CLS (Common Language
Specification)
58.
CLS – набор правил, которыеопределяют подмножество общих
типов и программных
конструкций, понятных всем
языкам программирования,
совместимым с Microsoft.NET
59.
CLS как подмножество CTS60.
CLS – набор правил, которыхдолжны придерживаться
производители компиляторов,
чтобы их продукты работали в .NET
61.
CLS как подмножество CTSтребует от создателей
компиляторов обязательной
поддержки библиотекой
базовых классов (BCL)
62.
BCL (Base Class Library) библиотека базовых классовплатформы Microsoft.NET
63.
Программы, написанные налюбом из языков,
поддерживающих платформу
Microsoft.NET, должны иметь
возможность пользоваться
всеми классами BCL
64.
BCL, по сути, представляетсобой API платформы .NET
65.
Вся библиотека базовых классовподелена на ряд отдельных
сборок, главной среди которых
является сборка mscorlib.dll
66.
В этой сборке содержитсябольшое количество базовых
типов, охватывающих широкий
спектр типичных задач
программирования
67.
Также достаточно много классовнаходится в сборке system.dll
68.
В частности, BCL предоставляетсредства базового доступа к
файлам, коллекции, потоки
ввода-вывода, средства работы
со строками и многое другое
69.
Framework Class Library—стандартная библиотека классов
платформы Microsoft.NET,
которая предоставляет
разнообразный набор сервисов
70.
FCL расширяет возможности BCLи относится ко всей библиотеке
классов, которая поставляется с
платформой .NET Framework
71.
FCL содержит расширенныйнабор библиотек, включая
ASP.NET, WinForms, WPF, XML,
ADO.NET и другие
72.
73.
В отличие от BCL, языки,поддерживающие платформу
.NET, не обязаны предоставлять
одинаково полный доступ ко всем
классам и всем возможностям FCL
74.
Microsoft .NET Core75.
В настоящее время Microsoftразвивает альтернативную
платформу .NET Core, которая
изначально предполагает
кроссплатформенную
разработку и эксплуатацию
76.
Платформа .NET Core основанана платформе .NET Framework
77.
.NET Core — это модульнаяплатформа для разработки
программного обеспечения с
открытым исходным кодом
78.
Каждый компонент .NET Coreобновляется через менеджер
пакетов NuGet
79.
Это означает, что можнообновлять её модули по
отдельности
80.
В то время как .NET Frameworkобновляется целиком
81.
Каждое приложение .NET Coreможет работать с разными
модулями и не зависит от
единого обновления платформы
82.
Платформа .NET Core отличается.NET Framework
кроссплатформенностью
83.
.NET Core совместима с такимиоперационными системами
как Windows, Linux и macOS
84.
Версии платформы.NET Core
• .NET Core 1.0 (27 июня 2016 года)
• .NET Core 1.1 (16 ноября 2016 года)
• .NET Core 2.0 (14 августа 2017 года)
• .NET Core 2.1 (30 мая 2018 года)
• .NET Core 3.0 (23 сентября 2019 года)
• .NET Core 3.1 (3 декабря 2019 года)
• .NET 5.0 (20 ноября 2020 года)
• .NET 6.0 (8 ноября 2021 года)
85.
Следующие версии будутназываться .NET (без
использования "Core" в названии),
что символизирует объединение
Mono и .NET Framework
86.
КомпонентыMicrosoft.NET Core
• CoreFX - это библиотека классов,
интегрированная в .NET Core
• CoreCLR - это среда выполнения,
включающая в себя JIT-компилятор,
встроенный сборщик мусора и другие
компоненты
87.
Рефлекторы и дотфускаторы88.
CIL-код по сравнениюс машинным кодом легче
«поддаётся» декомпиляции
89.
Т.е. восстановлению оригинальноготекста программы из текста
исполняемого файла
90.
Технология .NETреализуют возможность
«отражения» типов данных —
получение информации о типах
данных во время выполнения
программы
91.
В терминологии .NETэтот процесс называется
Reflection — «отражение»
92.
Рефлектор - программа,позволяющая просматривать
содержимое .NET-сборок
93.
Рефлектор интересен,как с точки зрения анализа
программного решения, так
и с точки зрения тестирования
приложения на этапе разработки
94.
Возможность применениярефлектора делает .NET-проекты
уязвимыми с точки зрения «Права
интеллектуальной собственности»
95.
Программные продукты, которыелегко декомпилируются,
открывают все возможности
обратной инженерии
96.
Однако открытый код можнозащитить
97.
Для этой цели были созданыпрограммные продукты дотфускаторы (dotfuscators)
98.
Данный процесс состоит изнабора методов запутывания кода
99.
Выделяют следующие методызапутывания:
• запутывание разметки кода
(изменение форматирования
исходного кода, переименование
идентификаторов);
• запутывание данных;
• запутывание конструкций
управления кодом.
100.
Код программных решенийнеобходимо защищать
от методов обратной инженерии,
особенно если эти решения
являются коммерческими
101.
Объектно-ориентированный языкразработки приложений для
платформы Microsoft .NET
102.
103.
104.
Все типы платформы .NETделятся на две категории:
значимые (value) и ссылочные
(reference)
105.
106.
Представителем ссылочноготипа на платформе .NET
является класс
107.
Представителем значимоготипа на платформе .NET
является структура
108.
Главное отличие междуними состоит в следующем
109.
Когда операция присваиванияприменяется к переменной
значимого типа, создается
независимая копия переменной
110.
Когда операция присваиванияприменяется к переменной
ссылочного типа, создается
копия ссылки
111.
112.
При передаче в метод позначению переменной
значимого типа создается
независимая копия переменной
113.
При передаче в метод позначению переменной
ссылочного типа создается
копия ссылки
114.
Объект ссылочного типа всегдасоздается в управляемой куче
115.
Сама ссылка создается встеке, если она является
локальной переменной метода
116.
117.
Либо ссылка создается в куче,если она является полем класса
118.
Объект значимого типасоздается в стеке, если он
является локальной
переменной метода
119.
120.
Объект значимого типасоздается в куче, если он
является полем класса
121.
Массивы в .NET122.
Все массивы неявнонаследуются от класса
System.Array
123.
Массивы бывают одномерные,многомерные и зубчатые
124.
Одномерный массив125.
Многомерный массив126.
Зубчатый массив127.
Тип System.String128.
Объект класса Stringнеизменяем (immutable)
129.
Созданную однажды строкунельзя сделать длиннее или
короче, в ней нельзя
изменить ни одного символа
130.
Благодаря неизменностистрок отпадает проблема
синхронизации потоков при
работе со строками
131.
Для конкатенации несколькихстрок на этапе выполнения
оператор + применять
нежелательно, так как он создает в
куче несколько строковых объектов
132.
Вместо него рекомендуетсяиспользовать тип
System.Text.StringBuilder
133.
Производительность String134.
По соображениямпроизводительности тип String
тесно интегрирован с CLR
135.
В частности, CLR «знает»точное расположение полей в
этом типе и обращается
к ним напрямую
136.
За повышениепроизводительности и прямой
доступ приходится платить
небольшую цену: класс String
является запечатанным (sealed)
137.
Иначе, имея возможность описатьсобственный тип, производный от
String, можно было бы добавлять
свои поля, противоречащие
структуре String и нарушающие
работу CLR
138.
Интернирование строк139.
В CLR несколько ссылок типаString могут указывать на один, а
не на несколько разных строковых
объектов, если строки идентичны
140.
Это связано с тем, что хранение впамяти нескольких экземпляров
одной строки приводит к
непроизводительным затратам
памяти — ведь строки неизменяемы
141.
Эффективного использованияпамяти можно добиться, если
держать в ней одну строку, на
которую будут указывать
соответствующие ссылки
142.
С этой целью для повышенияпроизводительности применяется
механизм интернирования строк
(string interning)
143.
Перегрузка операторов –возможность интегрировать
пользовательский тип данных в
язык программирования
144.
Перегрузка операторов даетвозможность определить
собственные действия для
стандартных операций, применяемых
к объектам пользовательского типа
145.
Перегрузка операторовосуществляется только
статическими методами класса
146.
Общий синтаксис перегрузкиоператоров
public static тип operator знак_операции (параметры)
{
< тело функции >
}
147.
Ограничения• Нельзя перегружать операции для
стандартных типов
• Нельзя создавать новые названия
операций
• Перегрузка не меняет приоритет
операций
• Для той или иной операции нельзя
изменить количество операндов
148.
Запрещенные к перегрузкеоператоры
• = - оператор присваивания
• sizeof - оператор определения
размера объекта
• . - оператор выбора
• ?: - условный тернарный оператор
• [ ] - оператор индексирования
149.
Запрещенные к перегрузкеоператоры
• is -оператор проверки совместимости
результата выражения с указанным типом
• as - оператор преобразования результата
выражения в указанный ссылочный тип
• typeof - оператор получения объекта
System.Type для указанного типа
• new - оператор создания объекта
150.
С концептуальной точки зренияперегрузка операторов – частный
случай статического полиморфизма
151.
Возможность одновременногосуществования в одной области
видимости нескольких различных
вариантов применения оператора
152.
Абстрагирование от конкретныхтипов параметров на этапе
компиляции программы
153.
Абстрактные классы иинтерфейсы
154.
Базовый класс, которыйсодержит хотя бы один
абстрактный метод называется
абстрактным базовым классом
155.
Абстрактный класс можетиспользоваться только в
качестве базового для других
классов — объекты абстрактного
класса создавать нельзя
156.
Если производный класс наследуетабстрактный класс, в нем должны
быть реализованы все абстрактные
методы базового класса
157.
В противном случае производныйкласс должен быть также
определен как абстрактный
158.
Абстрактный класс можнорассматривать как заготовку, в
которой часть функциональности
реализована, а оставшаяся часть
делегирована потомкам
159.
Интерфейс - это публичныйконтракт
160.
Класс (или структура) можетреализовывать несколько
интерфейсов
161.
Если класс реализуетинтерфейс, то это должно быть
сделано полностью
162.
Реализовать интерфейсвыборочно или по частям
нельзя
163.
В интерфейсе все методы неявноподразумеваются как public
164.
Соответственно, в классе,реализующем интерфейс, все
интерфейсные методы должны
быть объявлены как public
165.
Один интерфейс можетнаследовать другой
166.
В отличие от классов, одининтерфейс может наследовать
сразу несколько базовых
интерфейсов
167.
Структуры в C#/CLR168.
В отличие от C++, структуры вC#/CLR заметно отличаются от
классов в сторону уменьшения
функциональности
169.
В частности, структуры неподдерживают наследование, а
значит не поддерживают
динамический полиморфизм
170.
Однако структуры, как и классы,могут реализовывать интерфейсы
171.
Спецификатор доступа в C#/CLRдля членов структуры по
умолчанию такой же, как
у классов - private
172.
В структурах можно создаватьлюбые конструкторы, кроме
конструктора по умолчанию
173.
Следствие невозможностипереопределить конструктор по
умолчанию: поля структуры
нельзя проинициализировать при
их объявлении
174.
Зачем же тогда нужны структуры,если есть классы, которые умеют
больше?
175.
Использование экземпляровструктур, в случае их размещения
в стеке, обеспечивает большую
производительность
176.
Нет необходимостиразыменовывать ссылки на
объекты, хранящиеся в
динамической памяти и не
нагружается сборщик мусора
177.
Делегаты и события178.
Делегат - это класс, объекткоторого может ссылаться на
метод того или иного класса
179.
По сути, делегат являетсяабстракцией указателя на функцию
180.
Любой делегат способенвызывать свои методы синхронно
или асинхронно
181.
Делегат - это сгенерированныйкомпилятором запечатанный
класс, унаследованный от
System.MulticastDelegate
182.
В свою очередь,System.MulticastDelegate
унаследован от System.Delegate
183.
Напрямую наследовать классделегата от Delegate или
MulticastDelegate нельзя
184.
Экземпляр делегата являетсянеизменяемым (immutable)
объектом
185.
Делегаты используются дляпередачи методов в качестве
аргументов в другие методы
186.
Событие – это механизмавтоматического уведомления о
том, что в зоне ответственности
класса, которому принадлежит
событие, произошло некоторое
изменение
187.
События основаны на делегатах иявляются реализацией паттерна
Observer на платформе .NET
188.
Анонимная функция –этобезымянный метод, полностью
определенный внутри другого
метода
189.
Основное назначение анонимнойфункции – упрощение классов за
счет того, что отпадает
необходимость объявлять
отдельный метод, единственное
назначение которого состоит в
том, что он передается делегату
190.
Важно понимать, что анонимнаяфункция имеет тип делегата
191.
Анонимная функция – этобезымянный блок кода,
передаваемый конструктору
делегата
192.
Анонимные функции реализуютидею замыкания
193.
Замыкание – это анонимнаяфункция, находящаяся целиком в
теле другого метода и
захватывающая локальные
переменные этого внешнего
метода в свой контекст
194.
Реализованы две разновидностианонимных функций –
анонимные методы (C# 2.0) и
лямбда-выражения (C# 3.0)
195.
Рефлексия (отражение) - этомеханизм программного
получения метаданных любого
типа в виде объектной модели
во время выполнения
196.
Рефлексия позволяетсоздавать более гибкие и
компактные приложения
197.
Возможность полученияметаданных во время выполнения
программы позволяет расширять
её функциональность
198.
Атрибут - это специальный класс,при помощи которого можно
добавить в сборку
дополнительную информацию
(метаданные)
199.
Атрибут унаследован от базовогокласса Attribute
200.
Атрибут обеспечивают эффективныйспособ связывания метаданных с
кодом и может быть получен при
помощи механизма рефлексии
201.
Сериализация - это процесссохранения состояния
объекта в любом потоке с
возможностью его последующего
восстановления
202.
При этом сохраненнаяпоследовательность байт содержит
всю необходимую информацию для
восстановления этого объекта
203.
Использование этой технологиинамного облегчает процесс
сохранения и извлечения больших
объемов данных приложения в
самых разных форматах
204.
Важно понимать, что когда объектсохраняется в потоке, все
соответствующие данные (базовые
классы, вложенные объекты и т.п.)
тоже автоматически сохраняются
205.
Таким образом, при попыткевыполнить сериализацию
производного класса в этом
процессе будет задействована вся
цепочка наследования
206.
Множество взаимосвязанныхобъектов при сериализации
представляется в виде графа
объектов
207.
Службы сериализации позволяютсохранить полученный граф
объектов в самых разных форматах:
двоичном формате, формате SOAP,
формате XML или в формате JSON
208.
Сборщик мусора209.
Работа сборщика мусораоснована на алгоритме
"пометки и сжатия"
210.
Объекты, используемые намомент сборки мусора,
помечаются, а все остальные
объекты считаются ненужными
и будут освобождены (удалены)
211.
Отбор всех достижимых объектов(на которые ещё существуют
ссылки) обходится дорого
212.
Сборщик мусора с поддержкойпоколений (generational garbage
collector) работает на основе
следующих предположений
213.
Чем младше объект, тем корочеего время жизни
214.
Чем старше объект, тем длиннееего время жизни
215.
Сборка мусора в части кучивыполняется быстрее, чем
во всей куче
216.
Для воплощения этих идей всборщике мусора реализована
концепция поколений
(generations)
217.
Управляемая куча разделенана три поколения: нулевое,
первое и второе
218.
Поколение 0 составляютобъекты, никогда не
проходившие сборку мусора
219.
Объекты поколения 1пережили одну сборку мусора, а
объекты поколения 2 прошли
сборку мусора несколько раз
220.
Размеры поколений:•0-е поколение - 256 Кб (зависит от
кэша второго уровня процессора)
•1-е поколение - 2 Мб
•2-е поколение - 10 Мб
221.
Допустим только что запущенноеприложение создало пять объектов
(А–Е). Через некоторое время объекты
С и Е становятся недоступными.
222.
Если в результате выделенияпамяти для нового объекта
размер поколения 0 превышает
пороговое значение, должна
начаться сборка мусора
223.
Допустим, объекты А–Е относятсяк поколению 0. Тогда при
создании объекта F должна
начаться сборка мусора.
224.
Сборщик мусора определяет,что объекты С и E — это мусор,
и выполняет сжатие памяти для
объекта D, перемещая его
вплотную к объекту B
225.
Объекты, пережившиесборку мусора (А, В и D),
становятся поколением 1. Объекты
из поколения 1 были проверены
сборщиком мусора один раз.
226.
После сборки мусора объектов впоколении 0 не остается
227.
Туда в дальнейшем помещаютсяновые объекты
228.
Допустим приложение продолжаетработу и создает новые объекты
(F–K). В ходе работы приложения
становятся недоступными объекты
B, H и J.
229.
При попытке размещения объекта Lразмер поколения 0 превысил
пороговое значение, поэтому
должна начаться сборка мусора
230.
Сборщик мусора будет проверятьтолько объекты поколения 0
231.
Все объекты из поколения 0,пережившие сборку мусора,
перешли в поколение 1
232.
Сборщик мусора с поддержкойпоколений предполагает, что
объекты, прожившие достаточно
долго, продолжат жить и дальше
233.
Следовательно, сборка мусора впоколении 1, скорее всего,
окажется пустой тратой времени
234.
Так как сборщик не проверяетпоколение 1, память, занятая
объектом В, не освобождается,
даже если этот объект на момент
сборки мусора недоступен
235.
Допустим, приложение работаетдальше и выделяет память под
новые объекты (L–O)
236.
Во время работы приложениепрекращает использовать
объекты G, L и M, и они
становятся недоступными
237.
Допустим, в результатеразмещения объекта P размер
поколения 0 превысил
пороговое значение, что
инициировало сборку мусора
238.
Сборщик вновь решает собратьмусор только в поколении 0,
игнорируя недоступные объекты в
поколении 1 (B и G)
239.
Поколение 1 постепенно растет240.
Приложение продолжает работатьи создает новые объекты (P–S),
которые заполняют поколение 0
до его порогового значения
241.
Допустим, в результатеразмещения объекта T размер
поколения 0 превысил
пороговое значение, что вновь
инициировало сборку мусора
242.
Все объекты из поколения 0,пережившие сборку мусора, должны
перейти в поколение 1 (Q и S)
243.
Однако поколение 1выросло до таких размеров, что
все его объекты в совокупности
превысили пороговое значение
244.
Поэтому теперь сборщик мусорапроверяет все объекты поколения 1
245.
Все выжившие объектыпоколения 0 теперь находятся в
поколении 1, а все выжившие
объекты поколения 1 — в
поколении 2
246.
Как всегда, сразу после сборкимусора поколение 0 пустеет: в нем
будут размещаться новые объекты
247.
Если сборщик видит, что послесборки мусора в поколении 0
остается очень мало выживших
объектов, он может снизить порог
для поколения 0
248.
В этом случае сборкамусора будет выполняться чаще,
но это меньше загрузит сборщик
249.
В то же время, если послеобработки поколения 0 сборщик
мусора обнаруживает множество
выживших объектов, значит,
удается освободить мало памяти
250.
В этом случае сборщик мусораможет поднять порог для
поколения 0
251.
В результате сборкамусора выполняется реже, но
каждый раз будет освобождаться
значительный объем памяти
252.
Модель явного освобожденияресурсов (Паттерн Disposable)
253.
Получение ресурса естьинициализация (Resource
Acquisition Is Initialization (RAII)) —
паттерн (программная идиома)
254.
Этот паттерн предполагаетполучение некоторого ресурса в
момент создания и инициализации
объекта, а освобождение ресурса
— с уничтожением объекта
255.
Паттерн Disposable- это способреализации паттерна RAII в .NET
256.
Паттерн необходим дляосвобождения захваченных
ранее ресурсов
257.
Для реализации этого паттерна в.NET используются интерфейс
IDisposable и конструкция using()