2012-02-16 15 views
15

Si uno llama a Assembly.Load varias veces, ¿causa algún efecto secundario?Efectos secundarios de llamar a Assembly.Load varias veces

p. Ej.

for (int i = 0; i < N; i++) 
{ 
    Assembly.Load(assemblyStrongName); 
    // ....... 
} 

Esto carga el tiempo de montaje no es cierto? He consultado con AppDomain.CurrentDomain.GetAssemblies() antes y después y parece que está cargado una vez (como debería) pero ¿tiene efectos secundarios?

En una aplicación de servidor de larga ejecución (se ejecuta durante meses/años sin reinicio) ¿causa lo anterior problemas?

+2

Si tiene un sistema que, la carga de ensamblajes es la parte crítica de permanecer activo durante meses/años, estoy impresionado. –

+1

Corolario: si persigue una fuga de memoria, use las herramientas adecuadas para identificar los objetos reales que se están filtrando, en lugar de mirar su código fuente y adivinar al azar "podría" ser la fuga. –

+0

@Damien_The_Unbeliever: No estoy persiguiendo fugas de memoria. Nunca cargué manualmente una asamblea hasta ahora, así que fue curiosidad (programador) :). – JohnDoDo

Respuesta

14

Esto carga el conjunto una vez, ¿no?

Sí. El ensamblaje se carga en el AppDomain actual, y solo se cargará una vez en ese AppDomain. Llamar a esto varias veces simplemente devuelve el ensamblaje existente.

+0

¿Algún efecto secundario o atraso? – JohnDoDo

+3

@JohnDoDo No - solo debe devolver el ensamblaje existente. Es imposible cargar un ensamblado> 1 vez en un Dominio de aplicación, y una vez cargado, nunca se descargará (hasta que se cierre el Dominio de la aplicación) –

Cuestiones relacionadas