Artigo: 294710 - Última revisão: quinta-feira, 23 de Outubro de 2003 - Revisão: 2.2

Erro: Fuga de memória no processo de cliente quando utiliza o UDP para o 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 | Reduzir tudo

Sintomas

Se um processo de cliente DCOM (Distributed Component Object Model) que utiliza o protocolo de datagrama de utilizador (UDP, User Datagram Protocol) cria um grande número de objectos COM no computador remoto ou efectua várias chamadas para métodos que devolvem os apontadores de interface como parâmetros, poderá ver um aumento consistente bytes privados deste processo de cliente DCOM. Quando são empacotar referências de apontadores de interface, o identificador de objecto (OID) e identificador de ponteiro de interface (IPID) são colocados em cache pelo processo de cliente. Quando existem muitos activações e chamadas de método, esta cache continua a aumentar quando utiliza o protocolo UDP DCOM.

Se o servidor DCOM não devolver uma nova interface aos respectivos clientes sempre (que ocorre com uma singleton, um agrupamento de objectos ou um cenário de reutilização do objecto), este problema não poderá ocorrer porque o identificador de objecto (OID) e IPIDs são reutilizadas.

Resolução

Para contornar este problema, utilize o TCP/IP em vez de UDP para o protocolo DCOM. Para adicionar orientado para ligações TCP/IP à lista de protocolos predefinidos, siga estes passos:
  1. Inicie DCOMCNFG.exe.
  2. No separador Protocolos predefinidos , procure a opção orientado para ligações TCP/IP na lista de Protocolos DCOM . Se esta opção não estiver presente, clique em Adicionar . Na lista Sequência de protocolos , clique em TCP/IP Connection-Oriented e, em seguida, clique em OK .
  3. Se não for apresentado primeiro na lista de Protocolos DCOM orientado para ligações TCP/IP , clique em TCP/IP orientado para ligações e, em seguida, clique em Mover para cima .
  4. Reinicie o computador para que estas alterações entrem em vigor.

Ponto Da Situação

A Microsoft confirmou que este erro ocorre nos produtos da Microsoft listados no início deste artigo.

Mais Informação

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

Um processo de cliente DCOM que utiliza o UDP cria um objecto COM num computador remoto, chama um método simples no mesmo e liberta o proxy. Esta sequência de chamada é moldada num loop é semelhante ao seguinte código:
for (;;)
{
     CoCreateInstance (CLSID_TestServ, NULL, CLSCTX_REMOTE_SERVER, IID_TestServ, &pTestServ);
     pTestServ->Call();
     pTestServ->Release();
}
				
depois de permitir que este processo de cliente DCOM seja executado durante algum tempo, pode ver um aumento consistente de bytes privados do processo de cliente 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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/ )