O conjunto de trabalho de um aplicativo gerenciado pode ser reduzido através da descarga de bibliotecas não gerenciadas com o AfxFreelibrary?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho um aplicativo Windows gerenciado que carrega um componente C ++ gerenciado que usa o AFXLoadLibrary para carregar um componente de terceiros, se presente na máquina cliente. Depois de detectado, estou descarregando o componente usando o AFXFreelibrary, na tentativa de diminuir o conjunto de trabalho do aplicativo pai gerenciado.

A chamada para o AFXFreelibrary é bem -sucedida (verificada usando o Process Explorer), mas nenhuma memória é liberada. Isso se deve à natureza de um aplicativo gerenciado ou existe uma maneira de liberar esse espaço de processo?

Não estou procurando maneiras alternativas de resolver esse problema em geral, uma vez que o código já está em produção, gostaria de descobrir se a abordagem de descarregamento vale a pena.

Foi útil?

Solução

Deveria fazer, você pode provar isso escrevendo um aplicativo nativo puro e vendo o conjunto de trabalho. No entanto, o conjunto de trabalho é o tamanho da memória necessária para executar o aplicativo; portanto, se o código usado pela DLL puder ser trocado, o conjunto de trabalho não será reduzido - o Windows não o conta como parte do conjunto de trabalho .

Se a DLL tiver memória privada alocada para o processo, isso não poderá ser trocado, isso conta e reduzirá o conjunto de trabalho.

Portanto, a resposta é que depende. Não é garantido que faça diferença e, se a DLL não for usada, ela será trocada e não fará parte do conjunto de trabalho atual. Você também pode não se preocupar em descarregá -lo, a menos que goste de manter as coisas arrumadas.

A única maneira de reduzir o conjunto de trabalho é fazer com que seu aplicativo use menos memória. Como é um aplicativo .NET, é provável que você não tenha muito controle sobre ele (pois o GC se decidirá sobre quanta memória é 'ativa' e necessária no conjunto de trabalho)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top