Ну, это все относительно.Процесс в Windows, как правило, дорогой ресурс, но только если вы сравните его с операционной системой, такой как Unix.Обычные правила совместного использования ресурсов Windows действуют для управляемого процесса.В физической памяти будет только одна копия кода в CLR, JIT-компиляторе и любой сборке, которая содержит ngen-ed и включает все сборки .NET Framework.Диспетчер памяти Windows просто отображает одни и те же страницы во всех процессах, использующих эти библиотеки DLL.
То, что не используется совместно, - это частные байты, вы можете увидеть это число с помощью инструмента, подобного Process Explorer SysInternal.Большие куски приватных байтов в .NET-процессе:
- куча мусора
- стеков, используемых потоками, по умолчанию 1 МБ кусок
- любой статическийпеременные, используемые кодом, загруженным в домен приложения
- сгенерированный точно в срок код для сборок, которые не были обработаны
- частными данными для CLR и джиттера.
Очевидно, что использование ngen.exe может значительно сократить количество приватных байтов, если вы используете сборку в более чем одном процессе.AppDomain - это способ .NET сократить затраты на процесс и при этом достичь уровня изоляции, который очень эффективно используется в пользовательских хостах CLR, таких как ASP.NET и SQL Server.Если у вас есть возможность запускать код в потоке, а не запускать его в другом процессе, то поток всегда должен быть предпочтительным выбором.