Szukam bardziej efektywnego sposobu na znalezienie typu w zespole, który wywodzi się ze znanego określonego typu. Zasadniczo mam architekturę wtyczek w mojej aplikacji, a najdłużej robiliśmy to:Jak skutecznie zlokalizować określony typ w zespole *?
For Each t As Type In assem.GetTypes()
If t.BaseType Is pluginType Then
'Do Stuff here'
End If
Next
Niektóre z wtyczek mają dużą liczbę typów i zaczynamy widzieć to potrwać kilka sekund. Czy jest jakiś sposób mogę poprosić o wszystkie typy, które mają BaseType "pluginType"?
EDYTOWANIE: I over-uproszczony mój próbkę kodu. Używałem .GetExportedTypes() w moim rzeczywisty kod. Jednak wiele zajęć zostało oznaczonych jako publiczne, więc nie pomagało to zbytnio. Przejrzałem projekty i zaznaczyłem wszystko "Przyjaciel", z wyjątkiem rzeczywistej klasy wtyczek, i nadal zajmuje to prawie tyle samo czasu, aby sprawdzić złożenia. Zerowałem może 100 ms z 1,3 sekundy (czyli mniej niż 10%). Czy to tylko minimalny czas, z którym muszę sobie poradzić? Próbowałem też sugestii Assembly Attribute i nadal nie dawało to wielkiej różnicy (może znowu 100ms). Czy reszta czasu to obciążenie, które muszę płacić, aby ładować zespoły dynamicznie?
Naprawdę nie jest to odpowiedź na pytanie, ale być może warto rzucić okiem na MEF: http: //www.codeplex.com/MEF – herskinduk
O ile bardziej skomplikowany jest twój prawdziwy warunek testowy? Czy używasz 'AndAlso' i' OrElse' lub po prostu 'And' i' Or'? Pytam, ponieważ na mojej najwolniejszej maszynie, użycie interpretera DotLisp, wyliczenie 14807 typów zajmuje 0,322 sekundy, a uzyskanie typów publicznych z 'BaseType = Component' trwa 0,458 sekund. Och, sprawdzając skompilowaną wersję LinqPada tego zapytania na tym wolniejszym komputerze widzę problem: zanim obiekty 'Type' zostaną zbuforowane, lub nawet zbudowane za kulisami, jest to znacznie wolniejsze: 10961" Typów "wyliczonych w 10,206 sekundach! Natychmiast po znalezieniu "Komponentów" wystarczy tylko 0,03323 sekundy. –