2011-03-15 10 views
13

He encontrado algunos resultados de referencia de 2008 para probar el rendimiento de varios de los principales contenedores .NET DI/IoC here. Pero no he podido encontrar ningún resultado actualizado. ¿Existen puntos de referencia que comparen algunos de los grandes contenedores IoC (StructureMap, Unity, Ninject, Autofac, Castle Windsor, etc.)?DI/IoC Container Performance Benchmark Comparison?

+0

Estoy de acuerdo con Reed. Además, los puntos de referencia son fáciles de equivocarse. Busque, por ejemplo, en este hilo: http://stackoverflow.com/questions/5298240/hiro-vs-other-ioc-containers/5308894#5308894. – Steven

+1

El hecho de que tales nuevos puntos de referencia falten en la red, tomo como una declaración que esto es de menor preocupación. –

Respuesta

44

No recomendaría usar puntos de referencia de rendimiento para elegir un contenedor de IoC. Hay muchos, muchos factores más importantes, como conjunto de características, hoja de ruta de desarrollo y mantenibilidad, etc.

Tenga en cuenta que el punto de referencia que está citando es, en el peor de los casos, solo muestra una diferencia de 3-4x en la velocidad 1 millón de llamadas. En un escenario del "mundo real", DI/IoC se usa para conectar dependencias y tendrá un impacto mínimo en el rendimiento general de la aplicación, ya que esta fase de construcción es una porción increíblemente pequeña de su tiempo de ejecución general. Elegir un contenedor IoC de "alto rendimiento" frente a "bajo rendimiento" probablemente no tenga un impacto discernible en el rendimiento percibido de su aplicación.

En el escenario poco probable que el funcionamiento es realmente importante para su caso de uso específico, un punto de referencia es poco probable que sea una medida válida de cómo el rendimiento del contenedor IoC tendrá un impacto que, como puntos de referencia tienden a ser sesgados hacia un problema específico establecido. Recomiendo encarecidamente hacer su propio perfil y medición si realmente cree que este es un problema grave.

+6

Simplemente diciendo que elegir un contenedor IoC de alto rendimiento vs. bajo rendimiento puede tener un gran impacto discernible en el rendimiento percibido de una aplicación, ya que el cambio más pequeño perceptible para un usuario es de 50ms y las diferencias de rendimiento entre los mejores y peores contenedores a menudo es MANERA más de 50ms. Nosotros personalmente pasamos de Ninject a DryIoC 2.1.3 por esta misma razón. –

+0

Las diferencias 3-4x no son lo que muestran los puntos de referencia actualizados. Por ejemplo, la diferencia Ninject vs LightInject puede ser más de 200x, de acuerdo con http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison – daniloquio

6

En mi caso, la velocidad del contenedor IoC ha sido un factor importante. He tenido una aplicación que realiza muchas inyecciones y descubrí que Ninject estaba reduciendo considerablemente la velocidad de la aplicación. Sacar el IoC resolvió por completo los problemas de rendimiento. Estaré buscando otras soluciones.

+0

Si se saca el contenedor IoC resuelto los problemas de rendimiento, es posible que desee probar [Inyector simple] (https://simpleinjector.codeplex.com/). La sobrecarga de rendimiento de Simple Injector en comparación con la actualización manual de los gráficos de objeto es mínima (y, a veces, incluso mejor) como se puede ver en [este punto de referencia] (http://www.palmmedia.de/blog/2011/8/30/ ioc-container-benchmark-performance-comparison). – Steven

+0

Mire en DryIoC 2.1.3 –

5

IoC Container Benchmark - Performance comparison tiene rendimiento y características tablas de comparación por más de 20 productos y corresponde al día (última actualización 12/21/2017)

La conclusión del artículo de:

Especialmente Simple Injector parece ser una buena elección Es muy rápido, tiene una buena documentación y también admite escenarios avanzados como la interceptación y decoradores genéricos.

Consulte también https://stackoverflow.com/questions/1140730/net-di-containers-comparison/ pregunta.