#net #ос
Тоненбаум в книге "Операционные системы" пишет, что ОС отслеживает DLL, которые используются
совместно разными процессами и не грузит в память N одних и тех же DLL.
Справедливо ли это для .NET?
Вроде, Рихтер писал, что для доменов приложения mscorlib общая, а все остальные DLL
грузятся повторно.
Ответы
Ответ 1
Обычные managed dll не разделяются между процессами, и загружаются в кажджый процесс заново, и каждый раз заново проходят через процедуру генерации нативного кода из IL. Сгенерированный машинный код также хранится в private памяти процесса, и не разделяется между приложениями. Если у вас много экземпляров приложения, и накладные расходы на повторную загрузку dll становятся проблемой - пройдитесь по сборкам утилитой ngen. Нативные сборки на выходе ngen - это обычные Windows PE dll, они вполне шарятся между процессами. Инсталлятор фреймворка запускает ngen при установке и самого фреймворка, и обновлений, выглядит это примерно так Так что скорее всего для всех стандартных сборок фреймворка у вас есть локальные native images, и они разделяются между процессами даже без ручного запуска ngen.
Комментариев нет:
Отправить комментарий