Каковы наиболее трудоемкие проверки, выполняемые.NET при выполнении управляемого приложения?
Я разработал службу Windows на основе.NET, которая использует частично управляемый (C#) и неуправляемый код (библиотеки C/C++).
В некоторых доменных средах (например, 32-битный сервер Win 2k3 в домене abc.com) иногда запуск службы занимает более 30 секунд (особенно при перезапуске ОС), что приводит к невозможности запуска службы. Я подозреваю, что это как-то связано с безопасностью на уровне предприятия, но я точно не знаю.
http://msdn.microsoft.com/en-us/library/aa720255%28VS.71%29.aspx
Я безуспешно пытался сделать следующее: - отложить загрузку ссылок, переместив директивы using как можно дальше от реализации servicebase (особенно пространства имен xml - знаю, что вызывает задержки при загрузке) - отложить загрузку и настройку log4net - предварительно скомпилировать код с помощью использование ngen - задержка запуска рабочего потока - добавление / удаление манифеста + установка прицелов внутри - подписывание / отмена подписи двоичных файлов - использование настроек конфигурации (их много, а уровень области действия для всех установлен на приложение), как позже насколько возможно - добавьте все зависимости в GAC
Я еще не пытался добавить требования безопасности для класса, в котором реализован метод Main. Я не пытался реализовать свой собственный загрузчик конфигурации, потому что после проверки автоматически сгенерированного кода я заметил, что установочный класс является одиночным, и он получает свой экземпляр по вызову.
Полностью удалив зависимость log4net, это сработало, но это не вариант.
Когда сетевая карта отключена, сервис запускается немедленно.
2 ответа
Обычно вы используете SysInternals Process Monitor для диагностики этой проблемы. Тот факт, что это услуга усложняет дело. Проверьте этот пост в блоге на предмет аналогичного сеанса устранения неполадок.
Это крякает как проблема CRL (Список отзыва сертификатов) между прочим. Чтобы отключить его: Панель управления, Свойства обозревателя, вкладка "Дополнительно", "Безопасность", снимите флажок "Проверить аннулирование сертификата издателя".
Мы обнаружили, что использование UDP-приложения log4net с разрешением имени (даже до 12.0.0.1) вызывает значительное замедление запуска.