Виндзорский замок 3.2 разрешить производительность
У нас есть большое веб-приложение, которое годами пользуется Виндзорским замком. Приложение имеет около 700 компонентов регистрации более 370 услуг. Почти все они принадлежат корню, а именно контроллеру точки входа. Когда приходит веб-запрос, мы разрешаем этот контроллер ввода и позволяем ему обрабатывать запрос. Проблема в том, что разрешение корневого компонента занимает около 35 миллисекунд. Я бы сказал, это звучит довольно много для меня.
Мой вопрос, если число выше звучит нормально? Может кто-нибудь подсказать мне, что я могу сделать, чтобы улучшить время разрешения? Или проверить, что я делаю что-то не так?
Спасибо:)
1 ответ
Сколько времени требуется для разрешения графа объекта, зависит от множества факторов, таких как:
- Размер объекта графа
- Зарегистрированные образы жизни компонентов и расположение этих образов на графике (очевидно, если корневой объект является одноэлементным, разрешение выполняется очень быстро)
- Объем работы, которую вы делаете в ваших конструкторах
Так что без дополнительной информации сказать особо нечего. Однако я бы сказал, что 35 мс. это довольно много, даже для Виндзорского замка. Я провел небольшой тест по 6 наиболее часто используемым DI-контейнерам, одновременно разрешая объектный граф из 881 переходных компонентов, и самый медленный контейнер (Ninject) занял 5 мс, а самый быстрый контейнер (Simple Injector) - 0,01 мс (на моей машине), чтобы разрешить граф.
Container | ms.
----------------+-----
Simple Injector | 0.01
StructureMap | 0.50
Autofac | 0.77
Unity | 1.04
Castle Windsor | 3.96
Ninject | 5.03
Из этого теста я бы сказал, что 35 мс. немного медленнее для разрешения графа объектов такого размера с помощью Castle Windsor. Поэтому убедитесь, что ваши конструкторы инъекций просты, и вы не делаете ничего, кроме проверки на нулевое значение и сохранения входящих зависимостей. Таким образом, вы можете с уверенностью составлять свои графы объектов.
Кстати, вы можете найти более обширный тест здесь.