En mi informe de perfilo cada vez veo más los resultados de las pruebas simuladas con inyección de dependencia. Muchas de las dependencias eran estáticas, sino porque queremos poner a prueba los métodos de aislamiento en el que se cambian a los miembros de instancia, como el siguiente ejemplo:Problemas de rendimiento de la inyección de dependencia
class ShortLivedThing {
IDependency1 dep1;
IDependency1 dep2;
IDependency1 dep3;
...
int TheRealData;
// Constructor used in production
public ShortLivedThing() {
dep1 = new Dep1(); dep2 = new Dep2(); dep3 = new Dep3();
}
// DI for testing
public ShortLivedThing(IDependency1 d1, IDependency2 d2, IDependency3 d3) {
dep1 = d1(); dep2 = d2(); dep3 = d3();
}
}
A su vez las dependencias de la mayoría de las veces tienen otras dependencias y así sucesivamente. Esto da como resultado la creación de un árbol de objetos (en su mayoría "estáticos") cada vez que se realiza una llamada al método fuera de las pruebas. Cada uno de los objetos es muy pequeño (solo unos pocos punteros), pero el efecto de árbol lo convierte en un golpe de rendimiento cada vez mayor.
¿Qué podemos hacer al respecto?
¿Está perfilando su código de producción o sus pruebas? –
Estoy perfilando el código de producción. Las pruebas se ejecutan rápidamente porque no crean las dependencias de las dependencias. –