2012-02-16 12 views
15

Jeśli ktoś dzwoni Assembly.Load, powoduje to jakieś efekty uboczne?Efekty uboczne wywoływania Assembly.Load wiele razy

np.

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

To ładuje zespół jeden raz, prawda? Sprawdziłem z AppDomain.CurrentDomain.GetAssemblies() przed i po i wydaje się, że jest ładowany jeden raz (tak jak powinien), ale ma efekty uboczne?

W długotrwałej aplikacji serwerowej (działa przez miesiące/lata bez ponownego uruchamiania) czy powyższe powoduje problemy?

+2

Jeśli masz system, w którym obciążenie podzespołów jest jego najważniejszą częścią przez kilka miesięcy/lat, jestem pod wrażeniem. –

+1

Wniosek - jeśli szukasz wycieku pamięci, użyj odpowiednich narzędzi, aby zidentyfikować rzeczywiste obiekty, które wyciekły, zamiast patrzeć na kod źródłowy i losowe zgadywanie na "może" być przeciek. –

+0

@Damien_The_Unbeliever: Nie gonię za wyciekami pamięci. Nigdy nie ręcznie załadowałem zespołu "do tej pory, więc była to po prostu (programista) ciekawość :). – JohnDoDo

Odpowiedz

14

To ładuje zespół jeden raz, prawda?

Tak. Zespół zostanie załadowany do bieżącego AppDomain i zostanie załadowany tylko raz do tej AppDomain. Wywołanie tego wiele razy po prostu zwraca istniejący zestaw.

+0

Jakieś efekty uboczne lub gotchas? – JohnDoDo

+3

@JohnDoDo Nie - powinien po prostu zwrócić istniejący zestaw. Nie można załadować zespołu> 1 raz w AppDomain, a po załadowaniu go nigdy nie rozładuje (dopóki AppDomain nie zostanie zamknięty) –

Powiązane problemy