Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Грузятся ли в .NET одни и те же DLL в разные процессы или совместно используются?

#net #ос


Тоненбаум в книге "Операционные системы" пишет, что ОС отслеживает DLL, которые используются
совместно разными процессами и не грузит в память N одних и тех же DLL.

Справедливо ли это для .NET?

Вроде, Рихтер писал, что для доменов приложения mscorlib общая, а все остальные DLL
грузятся повторно.
    


Ответы

Ответ 1



Обычные managed dll не разделяются между процессами, и загружаются в кажджый процесс заново, и каждый раз заново проходят через процедуру генерации нативного кода из IL. Сгенерированный машинный код также хранится в private памяти процесса, и не разделяется между приложениями. Если у вас много экземпляров приложения, и накладные расходы на повторную загрузку dll становятся проблемой - пройдитесь по сборкам утилитой ngen. Нативные сборки на выходе ngen - это обычные Windows PE dll, они вполне шарятся между процессами. Инсталлятор фреймворка запускает ngen при установке и самого фреймворка, и обновлений, выглядит это примерно так Так что скорее всего для всех стандартных сборок фреймворка у вас есть локальные native images, и они разделяются между процессами даже без ручного запуска ngen.

Комментариев нет:

Отправить комментарий