2011-10-19 12 views
12

Ładowanie zestawów za pomocą Assembly.LoadFile (assemblyFilePath) w pętli i chcę uniknąć wywoływania Assembly.LoadFile, jeśli zespół został już raz załadowany. Czy powinienem się martwić wielokrotnym wywołaniem Assembly.LoadFile dla biblioteki DLL, która została już załadowana? Dzięki.W jaki sposób można uniknąć dynamicznego ładowania zespołu, który już został załadowany za pomocą funkcji Odbicie?

+1

Load() i LoadFile() ładują zbiory w różnych kontekstach. Dlaczego używasz LoadFile(), jeśli znajdują się w folderze, który zostanie znaleziony po prostu przez nazwę zespołu? Zobacz następujące artykuły: 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

Odpowiedz

19

Nie, nie musisz się martwić, ponieważ jeśli zespół został już załadowany nie zostanie załadowany ponownie

Jeśli zadzwonisz Assembly.LoadFile(), a następnie można załadować tego samego zespołu, ale wiele razy tylko wtedy, gdy za każdym razem ładujesz zespół z innej ścieżki. Możesz użyć Assembly.Load(), który załaduje złożenie tylko raz. Można również znaleźć informacje już załadowane zespoły w bieżącej domenie aplikacji przy użyciu

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

Wygląda na to, że Assembly.LoadFile jest co najmniej tak samo skuteczny w wykryciu, że zestaw jest ładowany (prawdopodobnie wydajniejszy) niż ręczne wyliczanie poprzez AppDomain.CurrentDomain.GetAssemblies(). – DeCaf

0

Dla danego AppDomain, można zadzwonić GetAssemblies i sprawdzić, czy jest załadowany.

Powiązane problemy