Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz 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
activeAssemblyLoadContext.- W przypadku odwołania do zestawu statycznego
activeAssemblyLoadContext to wystąpienie, które załadowało zestaw odwołujący się. - Preferowane interfejsy API czynią
activeAssemblyLoadContext jednoznacznymi. - Inne interfejsy API wywnioskują
activeAssemblyLoadContext. 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-nameW przypadku metod zestawactiveAssemblyLoadContext 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
activeAssemblyLoadContext 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
activeAssemblyLoadContext 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.