Я делаю некоторые эксперименты с Microsoft Dynamics CRM. Вы взаимодействуете с ним через веб-службы, и я добавил веб-ссылку на мой проект. Интерфейс веб-сервиса очень богат, а сгенерированный "Reference.cs" - это около 90 тыс. Loc.
Я использую веб-ссылку в консольном приложении. Я часто что-то меняю, перекомпилирую и бегу. Компиляция выполняется быстро, но новинка в ссылке на веб-службу очень медленная, занимает около 15-20 секунд:
CrmService service = new CrmService();
Профилирование показывает, что все время тратится на конструктор SoapHttpClientProtocol.
Виной является, по-видимому, тот факт, что код сериализации XML (не включенный в 90k loc, упомянутый выше) генерируется во время выполнения, прежде чем быть JIT'ed. Это происходит во время вызова конструктора. Ожидание довольно неприятно, когда вы играете и пытаетесь.
Я пробовал различные комбинации sgen.exe, ngen и XGenPlus (который занимает несколько часов и генерирует 500 Мбайт дополнительного кода), но безрезультатно. Я рассмотрел возможность внедрения службы Windows, в которой есть несколько экземпляров CrmService, готовых к раздаче, когда это необходимо, но это кажется чрезмерным.
Любые идеи?