2011-10-19 9 views
12

Estoy cargando ensambles usando Assembly.LoadFile (assemblyFilePath) en un bucle y quiero evitar llamar a Assembly.LoadFile si el ensamblado ya se ha cargado una vez. ¿Debería preocuparme si llamo a Assembly.LoadFile repetidamente por una DLL que ya ha sido cargada? Gracias.¿Cómo puedo evitar cargar dinámicamente un conjunto que ya he cargado usando Reflection?

+1

Load() y LoadFile() carga ensambles en diferentes contextos. ¿Por qué usas LoadFile() si están en una carpeta que se encontraría simplemente por el nombre del ensamblado? Vea estos artículos: http://blogs.msdn.com/b/suzcook/archive/2003/09/19/loadfile-vs-loadfrom.aspx http://blogs.msdn.com/b/suzcook/archive/2003 /05/29/57143.aspx – jishi

Respuesta

19

No, no necesita preocuparse porque si una asamblea ya se ha cargado no se cargará de nuevo

Si llama Assembly.LoadFile(), puede cargar la misma Asamblea múltiples veces, pero solo si está cargando ensamblados desde diferentes rutas cada vez. Puede usar Assembly.Load() que cargará un conjunto solo una vez. También se puede encontrar sobre los ensamblados ya cargados en el dominio de aplicación actual utilizando

Assembly[] asms = AppDomain.CurrentDomain.GetAssemblies(); 
+4

Y parece que Assembly.LoadFile es al menos tan eficiente para descubrir que el ensamblado está cargado (probablemente sea más eficiente) que la enumeración manual a través de AppDomain.CurrentDomain.GetAssemblies(). – DeCaf

0

Por lo dado dominio de aplicación, puede llamar GetAssemblies y ver si está cargado.

Cuestiones relacionadas