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 중국어 웹사이트의 기타 관련 기사를 참조하세요!