Um die Zeit zu testen, die GetTypes() nach dem Laden einer DLL benötigt, untersuchen wir den Prozess des Entladens und erneuten Ladens der DLL DLL.
Wenn eine Assembly mit geladen wird Assembly.LoadFrom() wird es zur Liste der Assemblys der AppDomain hinzugefügt. Zum Entladen gibt es in Assembly oder AppDomain keine explizite Methode zum Entladen. Sie können jedoch eine neue AppDomain erstellen, um die Assembly zu laden, und dann die AppDomain entladen, um die Ressourcen freizugeben.
Um die DLL neu zu laden, befolgen Sie diese Schritte:
string file = "path/to/assembly.dll"; // First AppDomain AppDomain dom1 = AppDomain.CreateDomain("domain1"); Assembly assem1 = dom1.Load(file); Stopwatch sw1 = Stopwatch.StartNew(); var types1 = assem1.GetTypes(); sw1.Stop(); double time1 = sw1.Elapsed.TotalMilliseconds; AppDomain.Unload(dom1); // Second AppDomain AppDomain dom2 = AppDomain.CreateDomain("domain2"); Assembly assem2 = dom2.Load(file); Stopwatch sw2 = Stopwatch.StartNew(); var types2 = assem2.GetTypes(); sw2.Stop(); double time2 = sw2.Elapsed.TotalMilliseconds; AppDomain.Unload(dom2); Console.WriteLine($"First Load: {time1} milliseconds"); Console.WriteLine($"Second Load: {time2} milliseconds");
In diesem Beispiel werden zwei AppDomains erstellt und die DLL in jede geladen. Anschließend wird die Zeit gemessen, die GetTypes() für beide Instanzen benötigt. Der Zeitunterschied kann auf den Overhead hinweisen, der durch das Neuladen der DLL entsteht.
assem = null reicht nicht aus, um einer Assembly zugewiesene Ressourcen freizugeben. Ein expliziter Aufruf des Garbage Collectors hilft ebenfalls nicht, da AppDomain-spezifische Ressourcen nicht von ihm verwaltet werden. Die Verwendung einer neuen AppDomain ist der empfohlene Ansatz zum Entladen von Assemblys und zum Freigeben der zugehörigen Ressourcen.
Das obige ist der detaillierte Inhalt vonWie kann ich eine mit Assembly.LoadFrom() geladene Assembly effizient entladen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!