C# домени додатків (Application Domains)
Домен програми - це своєрідний контейнер, усередині якого запускається програма, і який ізолює її під час виконання. Домен визначає межі керованої пам'яті для програми і є контейнером для завантажених складання та параметрів конфігурації програми. Кожен процес зазвичай розміщує лише один домен програми - стандартний домен, автоматично створений CLR при запуску процесу. Однак у рамках одного процесу можна створювати додаткові домени додатків.
Декілька доменів додатків зазвичай застосовуються з метою забезпечення ізоляції схожої з процесами, але з меншими накладними витратами. Коли додаткові домени програми створені всередині того самого процесу, середовище CLR забезпечує для кожного з них рівень ізоляції, подібний до такого у разі виконання в окремих процесах. Кожен домен має окрему пам'ять, об'єкти в одному домені не можуть конфліктувати з об'єктами в іншому домені, статичні члени того самого класу в кожному домені мають незалежні значення. Наприклад, в ASP.NET для кожного сайту створюється окремий домен програми, дозволяючи сайтам виконуватися в одному процесі, не впливаючи один на одного.
Ще одна причина створення окремого домену програми - дозволити збіркам вивантажуватись не завершуючи процес. Після завантаження збирання файл збирання блокується і його не можна редагувати або замінити. Щоб розблокувати файл, збирання треба вивантажити. Єдиний спосіб вивантажити збирання - закрити домен програми, в якій вона завантажена. Це стає проблематично, якщо збірка була завантажена в стандартний домен програми, оскільки закриття цього домену означає закриття програми. Завантаження збірки в окремий домен програми, який може бути знищений,дозволяє обійти цю проблему.