CoFreeUnusedLibrariesEx
9/8/2008
Descarrega as DLLs que não estão mais em uso e cujo Intervalo descarregar expirou.
Syntax
void CoFreeUnusedLibrariesEx(
DWORD dwUnloadDelay,
DWORD dwReserved
);
Parameters
- dwUnloadDelay
[no] O atraso em milissegundos entre o tempo que o DLL tenha declarado ele pode ser descarregado até que ele se torne um candidato para descarregar. Configuração dwUnloadDelay=INFINITE usa o sistema usar como padrão atraso (10 minutos). Configuração dwUnloadDelay= 0 força o descarregamento de quaisquer DLLs sem qualquer atraso.
- dwReserved
[no] Reservado para uso futuro; Deve ser zero.
Return Value
Nenhum.
Remarks
COM fornece funções para recuperar memória mantida por DLLs que contém os componentes. É a função mais comumente usada CoFreeUnusedLibraries. CoFreeUnusedLibraries Não Não imediatamente versão DLLs que não possuem nenhuma objeto ativo. Há um atraso 10 minutos para de vários segmentos apartments (MTAs) e apartments neutros (NAs). Para um único segmento apartments (STAs), não há nenhum atraso.
O atraso de 10-minuto para CoFreeUnusedLibraries é evitar as condições de corrida multithread causado pelo descarregamento um componente DLL. Esse atraso usar como padrão pode ser muito longo para muitos aplicativos.
COM mantém uma lista de ativo DLLs que tiveram componentes carregados para os apartments que podem ser hospedados no segmento onde essa função é chamado. Quando CoFreeUnusedLibrariesEx é chamado, cada DLL dessa lista tem seu DllCanUnloadNow função chamado. Se a pasta DllCanUnloadNow função retorna S_FALSE (ou não está exportada), este DLL não está pronto para ser descarregado. Se DllCanUnloadNow Retorna S_OK, este DLL é movido desativar o ativo lista para uma "Candidate-for-Unloading" lista.
Adicionando o DLL ao tempo lista candidato-para-descarregando carimbos de data e a DLL dwUnloadDelay Milissegundos de Quando ocorre esse mover. Quando CoFreeUnusedLibrariesEx (ou CoFreeUnusedLibraries) é chamado novamente, pelo menos dwUnloadDelay Milissegundos do chamar que movido o DLL para a lista, o DLL Candidate-for-Unloading, na verdade, é liberado de memória. Se COM usa o componente DLL enquanto o DLL está em lista de Candidate-for-Unloading, ela será movida voltar para o ativo lista.
Usando um dwUnloadDelay De 0 pode levar a conseqüências inesperadas. O componente DLL pode ser necessário algum tempo para limpeza após ele retorna a partir de DllCanUnloadNow função. De exemplo, caso o DLL teve seus próprios segmentos de trabalho, usar um valor de 0 seria provavelmente levar a um problema porque a execução codificar nesses segmentos seria desmapeado, causada pelo descarregamento do DLL antes que os segmentos de trabalho tenham uma oportunidade para sair. Além disso, usando muito breve de um dwUnloadDelay tempo pode levar a problemas desempenho porque há sobrecarga a lot mais no recarregar um DLL que permitindo que ele página fora.
O comportamento acima é disparado pela DLL fornecendo componentes COM segmento modelos definido como Livre, neutro ou ambos. Para um conjunto modelo de segmento para Apartment (ou se não modelo de segmento for especificada), dwUnloadDelay é tratada como 0, pois esses componentes estão ligados para o segmento único que hospeda o compartimento.
Para determinar se a plataforma oferece suporte a essa função, consulte Determinando suporte COM APIs.
Requirements
Header | objbase.h |
Library | ole32.lib |
Windows Embedded CE | Windows CE .NET 4.2 and later |
Windows Mobile | Windows Mobile Version 5.0 and later |