Применение 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 на вашей сборке.