為了測試載入DLL 後GetTypes() 所花費的時間,讓我們來探索一下卸載和重新載入DLL 的過程DLL。
當組件載入時使用 Assembly.LoadFrom() 載入後,它會加入 AppDomain 的組件清單中。要卸載它,Assembly 或 AppDomain 中沒有明確的方法用於卸載。不過,您可以建立新的 AppDomain 來載入組件,然後卸載 AppDomain 以釋放資源。
要重新載入 DLL,請按照以下步驟操作:
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");
此範例建立兩個 AppDomain 並將 DLL 載入到每個應用程式網域中。然後,它測量兩個實例的 GetTypes() 所花費的時間。時間上的差異可以顯示重新載入 DLL 所產生的開銷。
assem = null 不足以釋放分配給程序集的資源。明確呼叫垃圾收集器也無濟於事,因為 AppDomain 特定的資源不由它管理。建議使用新的 AppDomain 來卸載組件並釋放其關聯資源。
以上是如何有效率地卸載使用Assembly.LoadFrom()載入的組件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!