2009-07-03 2 views
1

При использовании библиотеки IOC, такой как ниндзя, есть ли стоимость исполнения для этого или это одноразовый вред во время application_start в основном?Какова стоимость исполнения с IOC (asp.net mvc)?

+0

Вы имеете в виду ninject? –

+2

Ninjas проворны и будут подключать ваши объекты, если вы этого не осознаете. Кроме того, они все время сражаются. –

ответ

8

У вас проблемы с производительностью? У вас есть конкретные цели, чтобы удовлетворить то, что вы не встречаете? Используете ли вы профилировщик для отслеживания проблем с производительностью для использования инфраструктуры IoC?

Если ответ на любой из этих вопросов «нет», то ответ real на ваш вопрос «это не имеет значения». Если ответ на все они «да», то вы уже знаете ответ.

Но, конечно, для использования инфраструктуры IoC существует стоимость исполнения. Использование new - это одна инструкция, тогда как IoC - это больше, поэтому она будет иметь некоторую стоимость. Имеет ли значение ваше заявление? Возможно нет. У вас есть Интернет на одном конце, по-видимому, база данных на другом, и, скорее всего, некоторые внутренние сети между ними. Скомпилированный код редко является узким местом в веб-приложениях.

1

В зависимости от того, как вы его используете, но если вы не создаете тысячи объектов одновременно, не должно быть заметного узкого места.

Когда объект разрешен из контейнера IoC, обычно контейнер будет использовать отражение для сканирования конструкторов и общедоступных свойств этого класса, а затем прокручивать некоторую внутреннюю коллекцию, чтобы найти наилучшее соответствие для каждой службы, которой требуется объект. Создание экземпляра будет продолжаться до тех пор, пока оно будет выполняться вручную, плюс небольшое количество времени для вызовов отражения.

Если вы используете переходный образ жизни и разрешаете объект внутри цикла, вы можете заметить небольшой удар по производительности, но в этот момент я бы спросил, есть ли лучший способ выполнить этот код.

И если вы еще не заметили удар производительности, то это не должно даже иметь значения для вас. Don't optimize until you absolutely have to.

0

Оформить заказ Munq.DI. Это простой и ОЧЕНЬ быстрый IOC, вдохновленный Funq. Он использует лямбда-выражения для определения метода создания и поддерживает Контейнер, Кэш, Сессия, Запрос и ВсегдаНовые пожизненные менеджеры.

Пример приложения включает интеграцию с ASP.NET MVC.