Heim > Backend-Entwicklung > C++ > Wie entlade ich mit Assembly.LoadFrom() geladene Baugruppen effizient?

Wie entlade ich mit Assembly.LoadFrom() geladene Baugruppen effizient?

Barbara Streisand
Freigeben: 2025-01-06 02:16:40
Original
873 Leute haben es durchsucht

How to Efficiently Unload Assemblies Loaded with Assembly.LoadFrom()?

Entladen von Assemblys, die mit Assembly.LoadFrom() geladen wurden

Um die Zeit zu ermitteln, die für die Ausführung von GetTypes() nach dem Laden einer DLL aufgewendet wurde, können Sie die unten aufgeführten Schritte ausführen.

Baugruppen entladen

  1. Release Referenzen: Setzen Sie das Assembly-Objekt auf null, um alle expliziten Referenzen auf die geladene DLL freizugeben. Dies garantiert jedoch kein sofortiges Entladen.
  2. AppDomain entladen: Erstellen Sie eine separate Anwendungsdomäne (AppDomain), um die DLL zu laden. Sobald die Zeitmessung abgeschlossen ist, können Sie die AppDomain entladen, um die mit der DLL verknüpften Ressourcen freizugeben. Dadurch wird ein sauberes Entladen gewährleistet.

Garbage Collection

Der Garbage Collector (GC) ist für die Rückgewinnung ungenutzten Speichers verantwortlich. Während das Setzen des Assembly-Objekts auf Null dazu führt, dass der GC das Objekt für eine mögliche Sammlung markiert, kann nicht garantiert werden, dass der Speicher sofort freigegeben wird.

Beispiel für die Verwendung von AppDomain

Der folgende Code zeigt, wie das geht Laden Sie eine Assembly in eine separate AppDomain und entladen Sie sie, nachdem Sie die Zeit für GetTypes() gemessen haben:

// Define the assembly path
string pathToAssembly = @"C:\temp\myassembly.dll";

// Create a new AppDomain
AppDomain dom = AppDomain.CreateDomain("some");

// Load the assembly in the new AppDomain
AssemblyName assemblyName = new AssemblyName();
assemblyName.CodeBase = pathToAssembly;
Assembly assembly = dom.Load(assemblyName);

// Measure the time for GetTypes()
Stopwatch sw = Stopwatch.StartNew();
Type[] types = assembly.GetTypes();
sw.Stop();
double time1 = sw.Elapsed.TotalMilliseconds;

// Unload the AppDomain to release the assembly
AppDomain.Unload(dom);
Nach dem Login kopieren

Durch Entladen der AppDomain, Sie stellen sicher, dass die der geladenen Assembly zugewiesenen Ressourcen freigegeben werden, was eine genauere Zeitmessung für nachfolgende Lade- und GetTypes()-Vorgänge ermöglicht.

Das obige ist der detaillierte Inhalt vonWie entlade ich mit Assembly.LoadFrom() geladene Baugruppen effizient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage