CLR COM Server. Где?
От: fronter3  
Дата: 04.07.07 06:42
Оценка:
Как выяснилось CRL реализована в MSCorWks.dll (~5MB)
И насколько я понял, при создании процесса (в результате запуска управляемой сборки), CLR загружается в каждый процесс.

Это так?
Если нет то просьба просвятить.
Спасибо
Re: CLR COM Server. Где?
От: _Morpheus_  
Дата: 04.07.07 09:59
Оценка:
Здравствуйте, fronter3, Вы писали:

F>Как выяснилось CRL реализована в MSCorWks.dll (~5MB)

F>И насколько я понял, при создании процесса (в результате запуска управляемой сборки), CLR загружается в каждый процесс.

CLR реализована в MSCOREE.DLL. При запуске дотнет приложения под Win выполняется обычный x86 код, который просто передает управление в функцию _CorExeMain из статически прилинкованой MSCOREE.DLL. Таким образом MSCOREE.DLL загружается в каждый дотнет процесс (это относится к Microsoft реализации дотнета). _CorExeMain считывает заголовок EXE файла из которого произведен вызов, находит IL код, компилирует код необходимый для выполнения Main, подставляя на место обращений к другим методам свой хук и передает этому коду управление. Если управление дошло до одного из хуков, то производится компиляция метода к которому произошло обращение и хук заменяется на адрес по которому произведена компиляция этого метода — в следующий раз этот вызов будет произведен сразу, без компиляции.
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[2]: CLR COM Server. Где?
От: fronter3  
Дата: 04.07.07 10:22
Оценка:
Здравствуйте, _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 МБ по умолчанию...
Re[3]: CLR COM Server. Где?
От: Mab Россия http://shade.msu.ru/~mab
Дата: 04.07.07 10:33
Оценка:
Здравствуйте, fronter3, Вы писали:

F>в отдельном процессе или грузится в каждый процесс, тем самым увеличивая его на 5 МБ по умолчанию...

Нет там никакого отдельного процесса.
Re[3]: CLR COM Server. Где?
От: _Morpheus_  
Дата: 04.07.07 10:33
Оценка:
Здравствуйте, 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>>
Re[4]: CLR COM Server. Где?
От: _Morpheus_  
Дата: 04.07.07 10:38
Оценка:
Здравствуйте, Mab, Вы писали:

F>>в отдельном процессе или грузится в каждый процесс, тем самым увеличивая его на 5 МБ по умолчанию...

Mab>Нет там никакого отдельного процесса.

почему-же, если это outofproc сервер то есть отдельный процесс в который все и грузиться, обращения к этому серверу производятся через межпроцесный маршалинг.

Если-же это inproc сервер, то все грузится в каждый процесс который обращается к этому серверу.
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[4]: CLR COM Server. Где?
От: fronter3  
Дата: 04.07.07 11:07
Оценка:
Здравствуйте, _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-ерами)
Re[5]: CLR COM Server. Где?
От: _Morpheus_  
Дата: 04.07.07 12:41
Оценка: 2 (1)
Здравствуйте, 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 сервер пока не сталкивался.
... << RSDN@Home 1.2.0 alpha rev. 676>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.