Ich wurde vor kurzem gebeten, einige Leistungsprobleme in einer Anwendung zu beheben, die mit Microsoft Composite UI Application Block erstellt wurde - speziell, dass das Laden zu lange gedauert hat.Dependency Injection Startleistung
Dies ist um Microsofts ObjectBuilder-Abhängigkeitsinjektionsframework aufgebaut, das reflection/attributes verwendet, um Klassen zu registrieren. Die Profilerstellung zeigte an, dass die App beim Start einen erheblichen Teil der Zeit für die Reflektion aufgewandt hat, da ObjectBuilder jeden Typ in jeder geladenen Assembly auf der Suche nach zu registrierenden Dingen scannt.
Alternative DI-Frameworks scheinen alle auch Attribute, XML-Konfiguration oder reinen Code zu verwenden.
Es scheint nicht, als wäre eines der anderen attributbasierten Frameworks besser, und ich bin skeptisch bezüglich der Startzeiten, wenn Stapel von XML analysiert werden müssen.
Die reinen Code-basierten Frameworks scheinen, als sollten sie viel schneller sein, aber sie sind auch viel weniger flexibel, so scheint es nicht wirklich eine klare gute Wahl zu sein ...
Dies führte mich zu suchen für DI-Container-Benchmarks, aber die einzige, die ich finden konnte, ist diese: http://www.codinginstinct.com/2008/04/ioc-container-benchmark-unity-windsor.html.
Obwohl es ein großartiger Benchmark ist, misst es nur, wie schnell Sie 1 Million Objekte mithilfe des Containers erstellen können. Ich habe kein Interesse daran, 1 Million Objekte zu erstellen, ich möchte nur, dass die App so schnell wie möglich startet, also was ich suche, sind irgendwelche Informationen über DI-Container Startup Kosten, ob es Blogposts, Anekdoten oder sogar etwas so einfaches wie "hier ist eine Möglichkeit, ObjectBuilder schneller zu machen".
Vielen Dank im Voraus
vereinbart, die meiste Zeit ist wegen JIT jeder Klasse. –
Soweit ich gesehen habe, hat NGen einen vernachlässigbaren Effekt auf die Reflektionsleistung, die die Quelle dieser Verlangsamung ist. – Bevan
Ich habe nicht versucht, NGEN, aber ich bin mir nicht sicher, ob es eine gute Idee wäre - die betreffende Anwendung ist eine ClickOnce-Client-App, und Dinge müssen nicht in der GAC gehen, um NGEN'ed gehen ? –