>백엔드 개발 >C++ >Assembly.LoadFrom()을 사용하여 로드된 어셈블리를 효율적으로 언로드하는 방법은 무엇입니까?

Assembly.LoadFrom()을 사용하여 로드된 어셈블리를 효율적으로 언로드하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-06 02:16:40847검색

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

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

DLL을 로드한 후 GetTypes()를 실행하는 데 소요된 시간을 확인하려면 아래에 설명된 단계를 따를 수 있습니다.

하역 중 어셈블리

  1. 참조 해제: 로드된 DLL에 대한 명시적 참조를 해제하려면 Assembly 개체를 null로 설정합니다. 하지만 이것이 즉시 언로드를 보장하는 것은 아닙니다.
  2. AppDomain 언로드: DLL을 로드하려면 별도의 애플리케이션 도메인(AppDomain)을 생성하세요. 시간 측정이 완료되면 AppDomain을 언로드하여 DLL과 연결된 리소스를 해제할 수 있습니다. 이렇게 하면 깔끔한 언로드가 보장됩니다.

가비지 수집

가비지 수집기(GC)는 사용되지 않은 메모리를 회수하는 역할을 합니다. Assembly 객체를 null로 설정하면 GC가 잠재적인 수집 대상 객체로 표시되지만 메모리가 즉시 해제된다는 보장은 없습니다.

AppDomain 사용 예

다음 코드는 방법을 보여줍니다. 별도의 AppDomain에 어셈블리를 로드하고 GetTypes()에 대한 시간을 측정한 후 언로드합니다.

// 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);

By AppDomain을 언로드하면 로드된 어셈블리에 할당된 리소스가 해제되어 후속 로드 및 GetTypes() 작업에 대해 보다 정확한 시간 측정을 제공합니다.

위 내용은 Assembly.LoadFrom()을 사용하여 로드된 어셈블리를 효율적으로 언로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.