Виндзорский замок 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. Поэтому убедитесь, что ваши конструкторы инъекций просты, и вы не делаете ничего, кроме проверки на нулевое значение и сохранения входящих зависимостей. Таким образом, вы можете с уверенностью составлять свои графы объектов.

Кстати, вы можете найти более обширный тест здесь.

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