Как выяснилось CRL реализована в MSCorWks.dll (~5MB)
И насколько я понял, при создании процесса (в результате запуска управляемой сборки), CLR загружается в каждый процесс.
Здравствуйте, fronter3, Вы писали:
F>Как выяснилось CRL реализована в MSCorWks.dll (~5MB) F>И насколько я понял, при создании процесса (в результате запуска управляемой сборки), CLR загружается в каждый процесс.
CLR реализована в MSCOREE.DLL. При запуске дотнет приложения под Win выполняется обычный x86 код, который просто передает управление в функцию _CorExeMain из статически прилинкованой MSCOREE.DLL. Таким образом MSCOREE.DLL загружается в каждый дотнет процесс (это относится к Microsoft реализации дотнета). _CorExeMain считывает заголовок EXE файла из которого произведен вызов, находит IL код, компилирует код необходимый для выполнения Main, подставляя на место обращений к другим методам свой хук и передает этому коду управление. Если управление дошло до одного из хуков, то производится компиляция метода к которому произошло обращение и хук заменяется на адрес по которому произведена компиляция этого метода — в следующий раз этот вызов будет произведен сразу, без компиляции.
Здравствуйте, _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, подставляя на место обращений к другим методам свой хук и передает этому коду управление. Если управление дошло до одного из хуков, то производится компиляция метода к которому произошло обращение и хук заменяется на адрес по которому произведена компиляция этого метода — в следующий раз этот вызов будет произведен сразу, без компиляции.
Рихтер:
The CLR itself isn't implemented in MSCorEE.dll; it is implemented in a file called
MSCorWks.dll.
Так же он утверждает что MSCorEE.dll это некий shim который и грузит нужную CLR:
By default, when a managed executable starts, the shim examines the executable file and
extracts the information indicating the version of the CLR that the application was built and
tested with
Но вопрос быд не в CLR а где находится COM Server? в отдельном процессе или грузится в каждый процесс, тем самым увеличивая его на 5 МБ по умолчанию...
Здравствуйте, fronter3, Вы писали:
F>в отдельном процессе или грузится в каждый процесс, тем самым увеличивая его на 5 МБ по умолчанию...
Нет там никакого отдельного процесса.
Здравствуйте, 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 сервера грузится в каждый процесс
Здравствуйте, Mab, Вы писали:
F>>в отдельном процессе или грузится в каждый процесс, тем самым увеличивая его на 5 МБ по умолчанию... Mab>Нет там никакого отдельного процесса.
почему-же, если это outofproc сервер то есть отдельный процесс в который все и грузиться, обращения к этому серверу производятся через межпроцесный маршалинг.
Если-же это inproc сервер, то все грузится в каждый процесс который обращается к этому серверу.
Здравствуйте, _Morpheus_, Вы писали:
_M_>Здравствуйте, 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:
_M_>суть от этого не меняется, сама mscoree есть, находится она тут: C:\WINDOWS\system32\mscoree.dll _M_>Что она там грузит для свое работы не столь важно.
F>>Но вопрос быд не в CLR а где находится COM Server? в отдельном процессе или грузится в каждый процесс, тем самым увеличивая его на 5 МБ по умолчанию...
_M_>зависит от типа сервера, для inproc сервера грузится в каждый процесс
и как узнать каким же COM Serverom является COM Server MSCorWks.dll (inproc, outproc) и можно ли поменять эти настройки или это определдяется производителем COM Servera (Microsoft-ерами)
Здравствуйте, fronter3, Вы писали:
_M_>>зависит от типа сервера, для inproc сервера грузится в каждый процесс
F>и как узнать каким же COM Serverom является COM Server MSCorWks.dll (inproc, outproc) и можно ли поменять эти настройки или это определдяется производителем COM Servera (Microsoft-ерами)
COM сервером является не mscorwks, а твой дотнет EXE файл
А каким он сервером является, зависит от того каким образом он регистрируется.
Обычно regasm регистрит как inproc, посмотреть тип можно открыв ветку реестра с соответствующим CLSID... если есть строковый параметр "inproc" значит это inproc сервер.
В реестре можно нашаманить чтобы он стал outofproc.
Как зарегистрить outofproc или как нужно модифицировать реестр чтобы из inproc сделать outofproc я сказать не могу, т.к. с необходимостью делать outofproc сервер пока не сталкивался.