2015-01-08 13 views
12

Ho un'applicazione web ASP.NET MVC/WebApi di dimensioni ragionevoli (~ 100KLOCS) che scricchiola un po 'sotto il carico (circa 1 milione di richieste al giorno). Ad esempio, una pagina richiede in genere 2-3 secondi per caricarsi, il che è un buon risultato da ottimale. Come ho iniziato a guardare intorno per possibili colli di bottiglia, non posso fare a meno di notare che Ninject, il mio contenitore CIO, è valutato il più lento con un margine molto sano:Vale la pena sostituire Novice per motivi di prestazioni?

http://www.palmmedia.de/Blog/2011/8/30/ioc-container-benchmark-performance-comparison https://github.com/ninject/ninject/issues/84

Ha chiunque altro stato in questa posizione e provato a sostituire Ninject per qualcos'altro, ad esempio, LightInject, SimpleInject o qualcosa del genere? Ne è valsa la pena? Ninject sembra essere il più popolare, con un sacco di supporto per community e framework, e non sono affatto ansioso di trovarmi in un progetto che finirà per non essere supportato. Oltre a ciò, non sono sicuro di come testare per vedere se, in un'applicazione reale, le prestazioni del contenitore IOC verranno notate.

Qualcuno là fuori ha storie del mondo reale o cicatrici da condividere? O suggerimenti su come capire se Ninject è anche un collo di bottiglia?

+0

Questa domanda sembra essere off-topic perché non si tratta di un problema relativo al codice specifico. – theMayer

+1

Non sarei d'accordo, ma poi credo già che gli argomenti delle domande dovrebbero essere più ampi di quanto alcuni tra i più aggressivi chiusure di SO sembrano pensare :-).Ma questo * è * legato a un problema di codifica molto specifico: sto usando un framework nel mio codice, ho notato alcuni possibili problemi e voglio sapere se questi problemi potrebbero essere affrontati con un framework diverso. Mi sembra abbastanza specifico per il codice :-). –

+1

Sono d'accordo con te su questo punto. Ci scusiamo per il voto ravvicinato. Unvoted. – theMayer

risposta

1

"Ne vale la pena" può essere deciso solo da voi. Hai eseguito un profiler sul tuo sito per vedere dove sono i peggiori bottlenecks? Potrebbe non essere nemmeno Ninject il tuo peggior criminale.

Certamente, ovunque tu possa raderti un po 'di tempo, ne varrà la pena per molte persone. Ma molto dipende dal tuo utilizzo. Ad esempio, se generalmente si iniettano solo pochi oggetti con un grafico di dipendenza poco profondo, probabilmente non si vedranno molti benefici. Ma, se disponi di grafici con una dipendenza profonda con centinaia di oggetti, potresti vedere molti benefici.

SimpleInjector probabilmente non verrà abbandonato presto, poiché lo sviluppatore principale è un ragazzo ben noto.

StructureMap è un'altra buona scelta, anche se è al centro del pacchetto in termini di prestazioni, è ben supportato e ha una buona comunità.

3

So che sono un po 'in ritardo con questa domanda, e sono sicuro che siete giunti a qualche conclusione, ma questa è una cosa che mi ritrovo a chiedere molto ultimamente. Ninject non è certamente il più veloce, ma è (secondo me) il framework più flessibile ed estensibile che abbia mai usato, ed è un'assoluta gioia lavorare con lui. Non ho mai incontrato un problema IoC che non ho potuto risolvere con Ninject.

È davvero un compromesso. Quando lavoro con un cliente in cui la flessibilità e l'estensibilità sono fondamentali, in genere la linea di applicazioni aziendali rivolta verso l'interno, utilizzo Ninject. Quando sto lavorando su componenti focalizzati di piccole dimensioni, in cui le prestazioni sono fondamentali, ad alto volume di servizi Web esterni rivolti, ad esempio, utilizzo qualcosa di più veloce come SimpleInjector. Tuttavia, ho sempre trovato che mancava quando ho bisogno di fare qualcosa di più avanzato, e alla fine lo sostituisco alla fine. Adattando le mie metodologie ad un approccio di stile di micro-servizio, tuttavia, ho iniziato a vedere più valore in quadri più piccoli.

Si vedrebbe un aumento delle prestazioni che sembra il tipo di volume che si sta vedendo. Ma il valore percepito di tale aumento delle prestazioni dipende interamente dal valore che si attribuisce alla flessibilità e alle altre funzionalità fornite da Ninject.