PROBLEMA: Processo de acesso COM automatização pode bloqueio aplicações de cliente Win95/98

Traduções de Artigos Traduções de Artigos
Artigo: 216400 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Sintomas

Quando automatizar um servidor de COM fora de processo da aplicação de cliente, se o código do cliente introduz um ciclo Justo ou efectua pedidos extensos para obter novas interfaces, a aplicação cliente poderá deixar de responder durante uma chamada de automatização, requerer que o utilizador terminar o processo de forma anormal. Depois de desligado, qualquer pedido COM envolvendo uma interface com referências empacotadas falha. É necessário reiniciar para resolver o problema.

O problema só ocorre em sistemas Windows 95 e Windows 98.

Causa

Quando uma interface empacotar as referências em limites de processos, um número de objectos de sistema é criado para processar a comunicação entre os processos de cliente e servidor. Isto inclui o proxy/stub, juntamente com o identificador de objecto (OID) e OXID COM necessários para identificar a interface a ser empacotar as referências. Quando a interface é libertada pelo processo de cliente, estes objectos serão destruídos durante a recolha de lixo.

Por predefinição, COM utiliza a recolha de dados para libertar recursos do sistema que já não são necessários. Esta colecção ocorre durante períodos de inactividade relativo. Se uma aplicação cliente não fornecer o tempo livre adequado para recolha de lixo ocorrer, é possível que o sistema irá ficar sem recursos e já será possível empacotar referências das interfaces. Se isto acontecer, a camada COM próprio poderá ficar danificada, mais impedir recolha de dados até que o sistema seja reiniciado.

A causa mais comum para o problema é que o código de cliente tiver introduzido um ciclo Justo ou está a executar um período intenso de automatização que envolvem uma hierarquia de objecto aninhado, onde são a ser efectuadas chamadas sucessivas para obter e liberte vários objectos out-of-process um curto período de tempo. Por exemplo, o código de exemplo seguinte mostra uma hierarquia de objecto aninhado requer três interfaces para empacotar as referências sempre que o método Imprimir é chamado. Uma vez que o código é executado num ciclo restritos, o número total de interfaces a empacotar é 30:
   For i = 1 To 10
      oExcel.ActiveWorkbook.Sheets(i).UsedRange.PrintOut
   Next i
				
para Windows 95 e Windows 98, o número total de interfaces que é possível empacotar referências ao mesmo tempo é aproximadamente 65.536.

Resolução

Os programadores necessitar minimizar o número de referências a objectos pedidas durante ciclos Justo ou grossas períodos de automatização. Se uma interface é necessário mais do que uma vez, deve ser mantido no e utilizada repetidamente em vez de disponibilizadas e reacquired várias vezes numa sequência.

Por exemplo, esta versão modificada do exemplo acima efectua a mesma tarefa mas apenas requer duas interfaces para empacotar as referências para cada chamada de imprimir (uma redução de 30 por cento do código acima):
   Set oBook = oExcel.ActiveWorkbook
   For i = 1 To 10
      oBook.Sheets(i).UsedRange.PrintOut
   Next i
				
outra solução possível poderá ser mover alguns da automatização código em execução no servidor, se o servidor permitir para dentro do processamento de scripts. Por exemplo, produtos do Microsoft Office incorporam VBA scripts de automatização interna. Ao mover o código de ciclo num módulo VBA, pode evitar empacotamento de referências várias interfaces e, em vez disso, invocar uma macro que permite que o servidor efectuar todo o trabalho.

Referências

Para obter informações adicionais, consulte o seguinte artigo na base de dados de conhecimento da Microsoft:
219905COMO: Adicionar dinamicamente e executa uma macro VBA do Visual Basic

Propriedades

Artigo: 216400 - Última revisão: 24 de janeiro de 2007 - Revisão: 4.4
A informação contida neste artigo aplica-se a:
  • Microsoft Windows 95
  • Microsoft Windows 98 Standard Edition
  • Microsoft Windows Millennium Edition
Palavras-chave: 
kbmt kbautomation kboleapp kbprb KB216400 KbMtpt
Traduçã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: 216400

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com