Применение LoaderOptimization к внутрипроцессным COM-серверам

Мне нужно создать несколько доменов приложений на моем внутрипроцессном COM-сервере.NET (это расширение пространства имен Windows Explorer).

В моем тестовом консольном приложении я могу создать 10 доменов + окна WPF за 40 секунд, что недопустимо. Добавление LoaderOptimization.MultiDomainHost ускоряет это до 2-5 секунд, что нормально.

Тем не менее, нет Main метод в COM-сервере и указав LoaderOptimization в AppDomainSetup влияет только на загрузку 2 или более дополнительных доменов (т. е. первый дополнительный AppDomain запускается через 3-4 секунды, другие через 0.1-0.3 секунды)

Итак, могу ли я указать LoaderOptimization для внутрипроцессного COM-сервера, и если да, то как?

1 ответ

Решение

Вы не можете установить эту опцию, пока пишете свой код на C#. Вам нужно будет самостоятельно разместить CLR, чтобы вы могли настроить домен приложения, для чего требуется код C++. Основной набор статей библиотеки MSDN начинается здесь.

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

Это оставляет проблему горячего запуска, связанную с своевременной компиляцией IL в машинный код. Быстрое решение этой проблемы - запуск ngen.exe на вашей сборке.

Другие вопросы по тегам