> 백엔드 개발 > C++ > Assembly.LoadFrom()을 사용하여 로드된 어셈블리를 효율적으로 언로드하려면 어떻게 해야 합니까?

Assembly.LoadFrom()을 사용하여 로드된 어셈블리를 효율적으로 언로드하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2025-01-02 20:36:39
원래의
808명이 탐색했습니다.

How Can I Efficiently Unload an Assembly Loaded with Assembly.LoadFrom()?

Assembly.LoadFrom()을 사용하여 로드된 어셈블리 언로드

DLL을 로드한 후 GetTypes()에 걸리는 시간을 테스트하기 위해 DLL을 언로드하고 다시 로드하는 프로세스를 살펴보겠습니다. DLL.

어셈블리 언로드

다음을 사용하여 어셈블리를 로드하는 경우 Assembly.LoadFrom()은 AppDomain의 어셈블리 목록에 추가됩니다. 이를 언로드하려면 Assembly 또는 AppDomain에 언로드를 위한 명시적인 메서드가 없습니다. 그러나 새 AppDomain을 생성하여 어셈블리를 로드한 다음 AppDomain을 언로드하여 리소스를 해제할 수 있습니다.

다시 로드 및 시간 비교

DLL을 다시 로드하려면 다음 단계를 따르세요.

  1. 다른 이름으로 새 AppDomain을 만듭니다.
  2. 어셈블리를 새 AppDomain에 로드합니다. AppDomain.Load()를 사용하는 AppDomain.
  3. 다시 로드된 어셈블리에 대해 GetTypes()에 걸리는 시간을 가져옵니다.
  4. AppDomain을 언로드하여 리소스를 해제합니다.

예 :

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿