AFXFREELIBRARY로 관리되지 않은 라이브러리를 언로드하여 관리되는 앱의 작업 세트를 줄일 수 있습니까?

StackOverflow https://stackoverflow.com/questions/213627

  •  03-07-2019
  •  | 
  •  

문제

클라이언트 컴퓨터에있는 경우 AFXLoadLibrary를 사용하여 타사 구성 요소를로드하는 관리 된 C ++ 구성 요소를로드하는 관리 된 Windows 응용 프로그램이 있습니다. 일단 감지되면 관리되는 부모 애플리케이션의 작업 세트를 낮추기 위해 AFXFREELIBRARY를 사용하여 구성 요소를 언로드하고 있습니다.

AFXFreelibrary에 대한 호출은 성공적이지만 (프로세스 탐색기를 사용하여 확인) 메모리는 해제되지 않습니다. 이것은 관리되는 응용 프로그램의 특성 때문입니까, 아니면이 프로세스 공간을 확보 할 수있는 방법이 있습니까?

코드가 이미 생산 중이기 때문에 일반적 으로이 문제를 해결하는 대안적인 방법을 찾고 있지 않습니다. 오히려 언로드의 접근 방식이 가치가 있는지 알고 싶습니다.

도움이 되었습니까?

해결책

순수한 네이티브 앱을 작성하고 작업 세트를 볼 수 있도록 증명할 수 있습니다. 그러나 작업 세트는 앱을 실행하는 데 필요한 메모리의 크기이므로 DLL에서 사용하는 코드를 교체 할 수 있으면 작업 세트가 줄어들지 않습니다. Windows는 작업 세트의 일부로 계산되지 않습니다. .

DLL에 프로세스에 개인 메모리가 할당 된 경우 교체 할 수없는 경우 작업 세트를 계산하고 줄입니다.

그래서 대답은 그것이 달라진다는 것입니다. 그것은 어떤 차이를 만들지 않으며, DLL이 사용되지 않으면, 그것은 교체되었고 현재 작업 세트의 일부가 아닙니다. 당신은 물건을 깔끔하게 유지하고 싶지 않다면 그것을 언로드하는 것을 귀찮게하지 않을 수도 있습니다.

작업 세트를 줄이는 유일한 방법은 앱이 메모리를 덜 사용하도록하는 것입니다. .NET 앱으로서, 당신은 전혀 통제 할 수 없을 것입니다 (GC가 메모리가 얼마나 많은 메모리가 활성화되고 작업 세트에서 필요한지에 대해 자체적으로 생각할 것입니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top