CLR зависимое разрешение сборки при запуске - PullRequest
4 голосов
/ 05 февраля 2010

CLR пытается разрешить [не обязательно загружать] все зависимые сборки при запуске программы? То есть выполняется ли разрешение зависимой сборки по требованию? Обратите внимание, что я не говорю о Assembly.Load * [отражающий] вид нагрузки.

Ответы [ 3 ]

4 голосов
/ 05 февраля 2010

Именно JIT-компилятор управляет загрузкой сборок в ответ на перевод IL в машинный код. Вызовы методов типа сначала переводятся для вызова функции-заглушки. При вызове эта заглушка активирует JIT-компилятор, чтобы загрузить IL (который загружает сборку при необходимости) и преобразовать его. Очень по запросу.

Одним из препятствий в этом процессе являются сборки, которые запускались через Ngen.exe, все сборки платформы .NET были, когда они были установлены на компьютере. Это обнаруживается при первой загрузке сборки. Затем JIT-компилятор пропускает этап перевода и использует предварительно переведенный машинный код как есть. Хотя при этом будет загружен весь машинный код, созданный сборкой, он все еще по требованию. Термин «загрузка» здесь относителен, Windows использует файл отображения памяти для сопоставления собственного образа с пространством виртуальной памяти. Фактические байты не считываются из файла до тех пор, пока выполнение кода не попадет на страницу памяти, которая еще не была отображена в ОЗУ. Технический термин для этого - «ошибка страницы», он виден в Taskmgr.exe.

3 голосов
/ 05 февраля 2010

С здесь

Загрузчик CLR загружается и инициализируется так мало, как это может сойти с рук. В отличие от загрузчика Win32, CLR загрузчик не разрешает и автоматически загружать подчиненного модули (или сборки). Скорее, второстепенные куски загружаются на требовать только если они на самом деле необходимо (как в Visual C ++ 6.0 функция задержки загрузки). Это не только ускоряет время инициализации программы но также уменьшает количество ресурсы, потребляемые бегом программа.

3 голосов
/ 05 февраля 2010

Зависимая сборка разрешается, когда требуется тип, определенный в этой сборке. Таким образом, сборка загружается по требованию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...