ID do artigo: 294710 - Última revisão: quinta-feira, 23 de outubro de 2003 - Revisão: 2.2

Erro: Vazamento de memória no processo de cliente quando usa o UDP para protocolo DCOM

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Recolher tudo

Sintomas

Se um processo de cliente do DCOM (Distributed Component Object Model) que usa UDP (User Datagram Protocol) cria um grande número de objetos COM no computador remoto ou faz muito de chamadas para métodos que retornam ponteiros de interface como parâmetros, você poderá ver um aumento nos bytes particulares desse processo de cliente DCOM consistente. Quando são empacotados ponteiros de interface, o identificador de objeto (OID) e o identificador de ponteiro de interface (IPID) são armazenados em cache pelo processo do cliente. Quando há muitos ativações e chamadas de método, esse cache continua a crescer quando você usa o protocolo UDP DCOM.

Se o servidor DCOM não retornar uma nova interface a seus clientes sempre (o que ocorre com um singleton, um pool de objetos ou um cenário de reutilização do objeto), esse problema não pode ocorrer porque o OID e IPIDs são reutilizados.

Resolução

Para contornar esse problema, use TCP/IP em vez de UDP para o protocolo DCOM. Para adicionar orientado a conexão TCP/IP à lista de protocolos padrão, execute estas etapas:
  1. Inicie DCOMCNFG.exe.
  2. Na guia Protocolos padrão , procure a opção de TCP/IP orientado a conexão na lista de Protocolos DCOM . Se esta opção não estiver presente, clique em Adicionar . Na lista Seqüência de protocolo , clique em Connection-Oriented TCP/IP e, em seguida, clique em OK .
  3. Se TCP/IP orientado a conexão não aparecer primeiro na lista de Protocolos DCOM , clique em TCP/IP orientado a conexão e, em seguida, clique em Mover para cima .
  4. Reinicie o computador para que essas alterações tenham efeito.

Situação

A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados no começo deste artigo.

Mais Informações

O cenário a seguir é um cenário que pode reproduzir o problema.

Um processo de cliente DCOM que usa UDP cria um objeto COM em um computador remoto, chama um método simples nele e libera o proxy. Essa seqüência de chamada é encapsulada em um loop que é semelhante ao seguinte código:
for (;;)
{
     CoCreateInstance (CLSID_TestServ, NULL, CLSCTX_REMOTE_SERVER, IID_TestServ, &pTestServ);
     pTestServ->Call();
     pTestServ->Release();
}
				
após você permitir que este processo do cliente DCOM seja executado por algum tempo, você pode ver um aumento consistente Private Bytes do processo de cliente de DCOM.

A informação contida neste artigo aplica-se a:
  • Microsoft COM+ 2.0 Standard Edition nas seguintes plataformas
    • Microsoft Windows NT 4.0
Palavras-chave: 
kbmt kbbug kbdcom kbnofix KB294710 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 294710  (http://support.microsoft.com/kb/294710/en-us/ )