Pregunta

¿La inyección de dependencia puede causar una gran sobrecarga?

Me imagino que sí, especialmente si se llama al solucionador muchas veces (lo cual es muy probable que mire ejemplos de patrones). ¿O estoy pensando mal? Desafortunadamente, no puedo probar por mí mismo, ya que nunca lo he usado, pero planeé usarlo.

¿Fue útil?

Solución

A menos que esté utilizando un localizador de servicios , dudo que la sobrecarga Hacer una diferencia significativa. (Incluso si lo es, es poco probable que sea significativo).

Utilizando la inyección del constructor y un marco moderno, se llamará al resolutor cuando se construyan los objetos. En su mayor parte, sospecho que encontrará que los objetos con dependencias son componentes de alto nivel, de larga duración o ambos.

Si está utilizando un contenedor IoC y está creando un lote de objetos con dependencias en un ciclo cerrado, podría necesitar hacer alguna optimización. Siempre puede perfilarlo o compararlo.

En resumen, no me preocuparía por eso.

Otros consejos

La inyección de dependencia como concepto no necesita tener una alta sobrecarga: simplemente estructura una clase para que sus conexiones a otras clases puedan construirse en tiempo de ejecución en lugar de estar cableadas en el código.

Por supuesto, hay formas de construir esa conexión en tiempo de ejecución que pueden tener una sobrecarga elevada. Evita esas formas.

http://www.codinginstinct.com /2008/04/ioc-container-benchmark-unity-windsor.html para algunas pruebas de rendimiento. Cada prueba ejecutaba 1000000 creaciones.

Tenga en cuenta que el punto de referencia muestra resolución singleton y resolución transitoria: un singleton está allí donde registra una instancia de una clase, p. (usando Unity):

container.RegisterInstance<IMyType>(new ConcreteMyType());

y esta instancia se devuelve cada vez (lo cual es bastante rápido).

Un transitorio es donde registra solo el tipo de clase y el marco IoC hará el trabajo de crearlo para usted, p. (en Unity)

container.RegisterType<IMyType, ConcreteMyType>();

Esto lleva más tiempo que devolver un singleton.

En términos de optimización general, la sobrecarga de la inyección de dependencia es pequeña cerveza; es más probable que otros cuellos de botella de rendimiento sean los que se deben optimizar.

Inyección de dependencias per se es solo una simple indirección, por lo que hay gastos generales, pero es bastante menor. La coincidencia y resolución de patrones de tiempo de ejecución es otra cosa (pero si bien se usa a menudo con la inyección de dependencia, no es que DI exija tales extras ;-).

La inyección de dependencia no va a generar grandes gastos generales. Estoy seguro de que encontrarás un cuello de botella en otro lugar. Si le preocupa tanto la sobrecarga, es posible que C # no sea el lenguaje que desea usar. Utiliza C # para los beneficios que trae, abstrae algunos detalles con los que no desea tratar.

Lo mismo con DI, también tiene beneficios como hacer que su aplicación esté acoplada libremente y eso significa que será más fácil para usted mantenerla en el futuro.

Overhead vs código comprobable y mantenible ... Elijo código comprobable y mantenible (siempre puede comprar una computadora más rápida)

=)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top