Niedawno poproszono mnie o rozwiązanie niektórych problemów związanych z wydajnością w aplikacji zbudowanej za pomocą bloku aplikacji Composite UI firmy Microsoft - szczególnie, że ładowanie trwało zbyt długo.Dependency Injection Startup Performance
Jest zbudowany na podstawie struktury wtryskowej Microsoft ObjectBuilder, która wykorzystuje odbicie/atrybuty do rejestrowania klas. Profilowanie wskazało, że podczas uruchamiania aplikacja poświęcała znaczną część czasu na refleksję, ponieważ ObjectBuilder skanuje każdy typ w każdym załadowanym zestawie w poszukiwaniu przedmiotów do zarejestrowania.
Alternatywne struktury DI wszystkie wydają się również używać atrybutów, konfiguracji XML lub czystego kodu.
Nie wydaje się, aby jakikolwiek inny framework oparty na atrybutach był lepszy, a sceptycznie podchodzę do czasów uruchamiania, gdy należy analizować stosy XML, itp.
Struktury oparte na czystym kodzie wydają się być znacznie szybsze, ale są również znacznie mniej elastyczne, więc nie wydaje się, że istnieje wyraźny dobry wybór ...
To doprowadziło mnie do wyszukiwania dla testów porównawczych kontenerów DI, ale jedyną, którą udało mi się znaleźć, jest ta: http://www.codinginstinct.com/2008/04/ioc-container-benchmark-unity-windsor.html.
Chociaż jest to świetny test porównawczy, mierzy on jedynie, jak szybko można utworzyć 1 milion obiektów za pomocą kontenera. Nie jestem zainteresowany tworzeniem miliona obiektów, chcę tylko, aby aplikacja uruchamiała się tak szybko, jak to możliwe, więc szukam informacji o kosztach, niezależnie od tego, czy będą to wpisy na blogu, anegdoty, czy nawet coś tak prostego, jak "tutaj jest sposób na przyspieszenie tworzenia ObjectBuildera".
góry dzięki
zgodził się, wiele czasu wynika z JIT każdej klasy. –
O ile widziałem, NGen ma znikomy wpływ na wydajność odbicia, co jest źródłem tego spowolnienia. – Bevan
Nie próbowałem wypróbować NGEN, ale nie jestem pewien, czy byłby to dobry pomysł - aplikacja, o której mowa, to aplikacja kliencka wdrożona ClickOnce, i nie ma rzeczy, które muszą iść w GAC, aby być NGEN'em ? –