Heim >Backend-Entwicklung >C++ >Wie kann ich mit Assembly.LoadFrom() geladene Baugruppen für Leistungstests effizient entladen?
Entladen von mit Assembly.LoadFrom() geladenen Baugruppen für Vergleichstests
Das dynamische Laden von Baugruppen mit Assembly.LoadFrom() verursacht einen Zeitaufwand, Vielleicht möchten Sie dieses Mal testen oder es vergleichen, wenn Sie die Baugruppe neu laden. Um dies zu erreichen, müssen Sie die Baugruppe nach dem ersten Laden entladen, was Fragen darüber aufwirft, wie Baugruppen entladen werden und wie die zugewiesenen Ressourcen im Müll gesammelt werden.
Baugruppen entladen
Das Festlegen von „assem = null“ allein reicht nicht aus, um eine Baugruppe zu entladen. Sie können die AssemblyLoadContext-Klasse verwenden, um die Assembly zu verwalten und explizit zu entladen:
AssemblyLoadContext loadContext = AssemblyLoadContext.GetLoadContext(assem); loadContext.Unload();
Garbage Collection
Der Garbage Collector wird der Assembly zugewiesenen Speicher automatisch zurückgewinnen und seine Typen, sobald es entladen ist. Wenn Sie die Garbage Collection jedoch explizit auslösen möchten, können Sie die Methode GC.Collect() verwenden.
Alternative Methode mit AppDomains
Ein alternativer Ansatz zum Entladen von Assemblys ist die Verwendung von AppDomains. Jede AppDomain ist eine separate Ausführungsumgebung, die Assemblys unabhängig voneinander hosten kann. Sie können eine neue AppDomain erstellen, die Assembly hineinladen, die Typen abrufen und dann die AppDomain entladen, um die Ressourcen freizugeben:
// Create a new AppDomain AppDomain dom = AppDomain.CreateDomain("SomeDomain"); // Load the assembly into the new AppDomain AssemblyName assemblyName = new AssemblyName(); assemblyName.CodeBase = pathToAssembly; Assembly assembly = dom.Load(assemblyName); // Get the types from the assembly Type[] types = assembly.GetTypes(); // Unload the AppDomain AppDomain.Unload(dom);
Das obige ist der detaillierte Inhalt vonWie kann ich mit Assembly.LoadFrom() geladene Baugruppen für Leistungstests effizient entladen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!