Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zarządzane zestawy znajdują się i są ładowane za pomocą algorytmu, który ma różne etapy.
Wszystkie zarządzane zestawy z wyjątkiem zestawów satelickich i WinRT
zestawów używają tego samego algorytmu.
Kiedy są ładowane zarządzane zestawy?
Najczęstszym mechanizmem wyzwalania obciążenia zarządzanego zestawu jest statyczne odwołanie do zestawu. Te odwołania są wstawiane przez kompilator za każdym razem, gdy kod używa typu zdefiniowanego w innym zestawie. Te zestawy są ładowane () zgodnieload-by-name
z potrzebami środowiska uruchomieniowego. Dokładny czas ładowania odwołań do zestawu statycznego jest nieokreślony. Może się różnić między wersjami środowiska uruchomieniowego i jest pod wpływem optymalizacji, takich jak wbudowywanie funkcji.
Bezpośrednie użycie następujących interfejsów API spowoduje również wyzwolenie obciążeń:
API (Interfejs Programowania Aplikacji) | Opis |
Active
AssemblyLoadContext
|
---|---|---|
AssemblyLoadContext.LoadFromAssemblyName | Load-by-name |
To wystąpienie. |
AssemblyLoadContext.LoadFromAssemblyPath AssemblyLoadContext.LoadFromNativeImagePath |
Załaduj ze ścieżki. | To wystąpienie. |
AssemblyLoadContext.LoadFromStream | Załaduj z obiektu. | To wystąpienie. |
Assembly.LoadFile | Ładowanie ze ścieżki w nowym AssemblyLoadContext wystąpieniu | Nowe AssemblyLoadContext wystąpienie. |
Assembly.LoadFrom | Załaduj ze ścieżki w wystąpieniu AssemblyLoadContext.Default. Dodaje procedurę AppDomain.AssemblyResolve obsługi. Program obsługi załaduje zależności zestawu z katalogu. |
Wystąpienie elementu AssemblyLoadContext.Default. |
Assembly.Load(AssemblyName) Assembly.Load(String) Assembly.LoadWithPartialName |
Load-by-name . |
Wywnioskowany z obiektu wywołującego. Preferuj AssemblyLoadContext metody. |
Assembly.Load(Byte[]) Assembly.Load(Byte[], Byte[]) |
Załaduj z obiektu w nowym AssemblyLoadContext wystąpieniu. | Nowe AssemblyLoadContext wystąpienie. |
Type.GetType(String) Type.GetType(String, Boolean) Type.GetType(String, Boolean, Boolean) |
Load-by-name . |
Wywnioskowany z obiektu wywołującego. Preferuj Type.GetType metody z argumentem assemblyResolver . |
Assembly.GetType | Jeśli typ name opisuje typ ogólny zakwalifikowany do zestawu, wywołaj element Load-by-name . |
Wywnioskowany z obiektu wywołującego. Preferować Type.GetType przy używaniu nazw typów kwalifikowanych przez zestaw. |
Activator.CreateInstance(String, String) Activator.CreateInstance(String, String, Object[]) Activator.CreateInstance(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]) |
Load-by-name . |
Wywnioskowany z obiektu wywołującego. Preferowanie metod Activator.CreateInstance, które przyjmują argument Type. |
Algorytm
Poniższy algorytm opisuje sposób ładowania zestawu zarządzanego przez środowisko uruchomieniowe.
Ustal element
active
AssemblyLoadContext.- W przypadku odwołania do zestawu statycznego
active
AssemblyLoadContext to wystąpienie, które załadowało zestaw odwołujący się. - Preferowane interfejsy API czynią
active
AssemblyLoadContext jednoznacznymi. - Inne interfejsy API wywnioskują
active
AssemblyLoadContext. Dla tych interfejsów API używana jest właściwość AssemblyLoadContext.CurrentContextualReflectionContext. Jeśli jego wartość tonull
, zostanie użyte wnioskowane AssemblyLoadContext wystąpienie. - Zobacz tabelę w sekcji Kiedy zestawy zarządzane są ładowane?
- W przypadku odwołania do zestawu statycznego
Load-by-name
W przypadku metod zestawactive
AssemblyLoadContext jest ładowany w następującej kolejności priorytetu:- Sprawdź jego
cache-by-name
. - Wywołaj funkcję AssemblyLoadContext.Load.
- Sprawdź pamięć podręczną wystąpienia i uruchom domyślną AssemblyLoadContext.Default logikę sondowania zestawu zarządzanego . Jeśli zestaw jest nowo załadowany, odwołanie zostanie dodane do AssemblyLoadContext.Default wystąpienia
cache-by-name
. - Zgłoś zdarzenie AssemblyLoadContext.Resolving dla aktywnego kontekstu AssemblyLoadContext.
- AppDomain.AssemblyResolve Zgłoś zdarzenie.
- Sprawdź jego
W przypadku innych typów obciążeń zestaw
active
AssemblyLoadContext jest ładowany w następującej kolejności priorytetu:- Sprawdź jego
cache-by-name
. - Załaduj z określonej ścieżki lub nieprzetworzonego obiektu zestawu. Jeśli zestaw jest nowo załadowany, odwołanie zostanie dodane do
active
AssemblyLoadContext wystąpieniacache-by-name
.
- Sprawdź jego
W każdym przypadku, jeśli zestaw jest załadowany po raz pierwszy, wówczas zdarzenie AppDomain.AssemblyLoad jest zgłaszane.