2012-02-16 14 views
15

Se si chiama Assembly.Load più volte provoca effetti collaterali?Effetti collaterali della chiamata Assembly.Load più volte

ad es.

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

Questo carica l'assemblaggio una volta non è vero? Ho controllato con AppDomain.CurrentDomain.GetAssemblies() prima e dopo e sembra che sia caricato una volta (come dovrebbe) ma ha effetti collaterali?

In un'applicazione server con esecuzione prolungata (in esecuzione per mesi/anni senza riavvio), il precedente causa problemi?

+2

Se si dispone di un sistema che, il caricamento degli assiemi è la parte critica di esso che rimane attivo per mesi/anni, sono impressionato. Corollario –

+1

- se stai inseguendo una perdita di memoria, usa gli strumenti appropriati per identificare gli oggetti effettivamente trapelati, piuttosto che guardare il tuo codice sorgente e indovinare casualmente che "potrebbe" essere la perdita. –

+0

@Damien_The_Unbeliever: Non sto inseguendo fughe di memoria. Non ho mai caricato manualmente un assieme 'fino ad ora, quindi era solo curiosità (programmatore) :). – JohnDoDo

risposta

14

Questo carica il gruppo una volta non è vero?

Sì. L'assembly viene caricato nell'AppDomain corrente e verrà caricato una volta sola in AppDomain. La chiamata più volte restituisce semplicemente l'assembly esistente.

+0

Eventuali effetti collaterali o trucchi? – JohnDoDo

+3

@JohnDoDo No - dovrebbe solo restituire l'Assembly esistente. È impossibile caricare un assembly> 1 volta in un AppDomain e, una volta caricato, non verrà mai scaricato (fino all'arresto di AppDomain) –

Problemi correlati