Algorytm ładowania zarządzanego zestawu
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 ma to wpływ na optymalizacje, takie jak tworzenie podkreślenia.
Bezpośrednie użycie następujących interfejsów API spowoduje również wyzwolenie obciążeń:
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 jest to wystąpienie,
active
AssemblyLoadContext które załadowało odwołujące się zestaw. - Preferowane interfejsy API tworzą jawne
active
AssemblyLoadContext . - Inne interfejsy API wywnioskuje element
active
AssemblyLoadContext. W przypadku tych interfejsów AssemblyLoadContext.CurrentContextualReflectionContext API jest używana właściwość . 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 jest to wystąpienie,
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
. - AssemblyLoadContext.Resolving Zgłoś zdarzenie dla aktywnego elementu 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 obu przypadkach, jeśli zestaw jest nowo załadowany, AppDomain.AssemblyLoad zdarzenie jest zgłaszane.