ованої купи. Всі типи покажчиків розподіляються в керованій купі. Коли створюється перша покажчик, пам'ять для асоційованого з ним типу починається з базового адреси купи. При створенні наступного покажчика пам'ять виділяється безпосередньо за першим. Поки адресний простір доступно, процес триває описаним чином.
Розподіл в керованій купі йде швидше, ніж в некерованою. CLR просто нарощує значення покажчика купи, що відбувається майже так само швидко, як заталківаніе даних в стек. Крім того, так як нові об'єкти розподіляються в пам'яті послідовно, додаток звертається до них швидше.
Коли збирач сміття .NET вибирає об'єкти для видалення з купи, він не перевіряє всі об'єкти поспіль. Для підвищення продуктивності збору сміття всі об'єкти в керованій купі розбиті на групи - покоління. Сенс такого угрупування простий: чим довше об'єкт існує в керованій купі, тим більша ймовірність того, що він буде потрібно і надалі. У той же час існує значна ймовірність того, що недавно з'явилися об'єкти швидко перестануть бути потрібними. Грунтуючись на цій концепції, кожен об'єкт відносять до одного з наступних поколінь:
· покоління 0 - недавно з'явилися об'єкти, які ще не перевірялися складальником сміття;
· покоління 1 - об'єкти, які пережили одну перевірку;
· покоління 2 - об'єкти, які пережили більш ніж одну перевірку.
При черговому запуску процесу збору сміття збирач перевіряє і видаляє непотрібні об'єкти покоління 0. Якщо при цьому звільнилося достатньо пам'яті, вцілілі об'єкти переводяться в покоління 1 і процес збору завершується. Якщо після перевірки покоління 0 пам'яті недостатньо, перевіряються об'єкти покоління 1, а потім (при необхідності) - і покоління 2. Таким чином, за рахунок такої технології щойно створені об'єкти зазвичай видаляються швидше, а процес збору сміття мінімізується за часом.
7.3.4 Складання
Зборки - фундаментальні частини програм для .NET Framework. Збірка виконує такі функції:
1) Збірка містить код, який виконує CLR. СIL-код у файлі формату РЕ не вчините, якщо не має пов'язаного з ним маніфесту збірки. Збірка може мати тільки одну точку входу.
2) Збірка формує кордону захисту. Збірка є блок, в якому запитуються і видаються дозволи.
) Збірка формує кордону типу. Кожен ідентифікатор типу включає ім'я збірки, в якій він розташований. Тип, завантажений в межах однієї збірки, в загальному випадку може відрізнятися від однойменного, але завантаженого в іншу збірку.
) Збірка визначає межі видимості посилань. Маніфест збірки містить метадані, які використовуються для дозволу посилань і задоволення ресурсних вимог. Маніфест вказує експортовані типи і ресурси і перераховує інші збірки, від яких залежить дана збірка.
) Збірка визначає межі контролю версій. Збірка являє собою мінімальний блок в CLR, всі типи і ресурси якого мають ту ж версію, що і версія блоку.
) Збірка визначає одиницю розповсюдження. У момент старту повинні бути завантажені тільки спочатку викликані збірки. Інші збірки, такі як ресурси локалізації або збірки, що містять допоміжні класи, можуть завантажуватися на вимогу. Це спрощує додатки і робить їх менше, що полегшує завантаження з Інтернету.
) Збірка є одиницею, для якої підтримується паралельне виконання.
) Складання можуть бути статичними і динамічними. Статичні збірки включають типи .NET Framework (інтерфейси і класи), а також потрібні ресурси. Статичні збірки зберігаються на диску у вигляді РЕ-файлів. Ви можете використовувати .NET Framework для створення динамічних зборок, які не зберігаються на диску і створюються (і запускаються) безпосередньо в пам'яті. Після виконання динамічну збірку можна зберегти на диску.
Зборки створені для спрощення розповсюдження програм і для вирішення проблем контролю версій, характерних для додатків, заснованих на компонентах.
Існує дві проблеми сумісності версій:
1) Неможливо висловити версійні правила взаємодії між частинами програми та забезпечити їх реалізацію силами ОС. Поточний підхід керується правилом зворотної сумісності, яке часто важко гарантувати. Визначення інтерфейсів повинні бути статичними, раз і назавжди опублікованими, і фрагменти коду повинні підтримувати зворотну сумісність. Більше того, код зазвичай розробляється так, що в кожен момент часу на даному комп'ютері може бути встановлена ??і запущена єдина версія об'єкта або DLL.
2) Ні шляхів узгодження між наборами компонентів, які збиралися разом, і набором, представленим в момент запуску.
Об'єднання ци...