Estoy buscando una manera más eficiente de encontrar un tipo en un conjunto que se deriva de un tipo específico conocido. Básicamente, tengo una arquitectura plug-in en mi solicitud, y por el tiempo más largo que he estado haciendo esto:¿Cómo puedo ubicar un tipo específico en una Asamblea * de manera eficiente *?
For Each t As Type In assem.GetTypes()
If t.BaseType Is pluginType Then
'Do Stuff here'
End If
Next
Algunos de los plugins tienen un gran número de tipos y estamos empezando a ver esto toma una pocos segundos. ¿Hay alguna manera en que pueda simplemente solicitar todos los tipos que tengan un BaseType de "tipo de complemento"?
EDITAR: He sobre simplificado mi código de muestra. Estaba usando .GetExportedTypes() en mi código actual. Sin embargo, muchas clases se marcaron como públicas, por lo que no ayudaba demasiado. Revisé los proyectos y marqué todo como "Amigo", excepto por la clase de complemento real, y aún lleva casi el mismo tiempo examinar los conjuntos. Corté tal vez 100 ms fuera de 1.3 segundos (que es menos del 10%). ¿Es este el tiempo mínimo que tengo para tratar? También probé la sugerencia de Atributo de la Asamblea y todavía no produjo mucha diferencia (quizás 100 ms de nuevo). ¿Es el resto del tiempo la sobrecarga que tengo que pagar para cargar ensambles dinámicamente?
No es realmente una respuesta a la pregunta, pero tal vez eche un vistazo a MEF: http: //www.codeplex.com/MEF – herskinduk
¿Cuán más compleja es su condición de prueba real? ¿Estás usando 'AndAlso' y' OrElse' o simplemente 'And' y' Or'? Lo pregunto porque en mi máquina más lenta, usando el intérprete DotLisp, enumerar 14807 tipos toma 0.322 segundos y obtener tipos públicos con 'BaseType = Component' toma 0.458 segundos. Oh, al verificar la versión compilada de LinqPad de esta consulta en esta máquina más lenta, veo el problema: antes de que los objetos 'Type' estén en caché, o incluso construidos detrás de escena, es mucho más lento: 10961' Types' enumerados en 10.206 segundos. Inmediatamente después, son solo 0.03323 segundos para encontrar 'Componentes'. –