Здравствуйте, fronter3, Вы писали:
F>Здравствуйте, _Morpheus_, Вы писали:
_M_>>Здравствуйте, fronter3, Вы писали:
F>>>Как выяснилось CRL реализована в MSCorWks.dll (~5MB)
F>>>И насколько я понял, при создании процесса (в результате запуска управляемой сборки), CLR загружается в каждый процесс.
_M_>>CLR реализована в MSCOREE.DLL. При запуске дотнет приложения под Win выполняется обычный x86 код, который просто передает управление в функцию _CorExeMain из статически прилинкованой MSCOREE.DLL. Таким образом MSCOREE.DLL загружается в каждый дотнет процесс (это относится к Microsoft реализации дотнета). _CorExeMain считывает заголовок EXE файла из которого произведен вызов, находит IL код, компилирует код необходимый для выполнения Main, подставляя на место обращений к другим методам свой хук и передает этому коду управление. Если управление дошло до одного из хуков, то производится компиляция метода к которому произошло обращение и хук заменяется на адрес по которому произведена компиляция этого метода — в следующий раз этот вызов будет произведен сразу, без компиляции.
F>Рихтер:
F>F>The CLR itself isn't implemented in MSCorEE.dll; it is implemented in a file called
F>MSCorWks.dll.
F>Так же он утверждает что MSCorEE.dll это некий shim который и грузит нужную CLR:
суть от этого не меняется, сама mscoree есть, находится она тут: C:\WINDOWS\system32\mscoree.dll
Что она там грузит для свое работы не столь важно.
F>Но вопрос быд не в CLR а где находится COM Server? в отдельном процессе или грузится в каждый процесс, тем самым увеличивая его на 5 МБ по умолчанию...
зависит от типа сервера, для inproc сервера грузится в каждый процесс
... << RSDN@Home 1.2.0 alpha rev. 676>>