CORRECÇÃO: Violação de acesso ocorre quando o conjunto de registos ADO em aplicações multithreaded de fecho

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

Nesta página

Sintomas

Quando em execução multithread ActiveX Data Objects (ADO) de código em importância alta num computador com múltiplos processadores, poderá ocorrer uma violação de acesso (AV) quando fecha um conjunto de registos do ADO. Exame da pilha de chamadas na altura do AV (com os símbolos depuração adequados instalado) revela que a última chamada de ADO na pilha é uma chamada para o msado15 da função interna de ADO! CCollectionArray__Delete.

Resolução

Este problema é corrigido no service packs mais recentes para o Microsoft Windows 2000, o MDAC 2.5 e o MDAC 2.6 e no MDAC versão 2.7.
  • Para resolver este problema, obtenha o service pack mais recente do Windows 2000. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
    260910Como obter o Service Pack mais recente do Windows 2000
  • Para resolver este problema, obtenha o service pack mais recente do Microsoft Data Access Components 2.5. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
    293312INFO: Como obter o mais recente MDAC 2.5 Service Pack
  • Para resolver este problema, obtenha o service pack mais recente do Microsoft Data Access Components 2.6. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
    300635INFO: Como obter o MDAC 2.6 mais recente Service Pack

Correcção

A versão inglesa desta correcção ter os seguintes atributos de ficheiro ou posteriores:
   Date         Version       Size      File name     Platform
   -----------------------------------------------------------
   09/15/2000   2.51.5715.0   487,696   Msado15.dll   x86 
				

Como contornar

Evite fechar um conjunto de registos do ADO e respectivo objecto de ligação do ADO principal exactamente o mesmo tempo em 2 threads diferentes ou aplicar esta correcção.

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no início deste artigo. Este problema foi corrigido pela primeira vez no Microsoft Data Access Components (MDAC) 2.5 Service Pack 2, o MDAC 2.6 Service Pack 1, o MDAC 2.7 e Microsoft Windows 2000 Service Pack 2.

Mais Informação

Para reproduzir o problema, um conjunto de registos do ADO e o respectivo elemento principal do ADO ligação devem ser fechados ou disponibilizadas em 2 diferentes threads exactamente o mesmo tempo. Tenha em atenção que este problema só foi com êxito reproduzido num computador com múltiplos processadores.

O problema inicial foi descoberto utilizando as classes Windows Foundation Classes (WFC) ADO Java numa aplicação COM + em muito exigentes com ADO definido para modo free-threaded. A máquina virtual da Microsoft (Microsoft VM) defers o lançamento COM objectos até que o recolector de lixo seja activado. Além disso, o recolector de lixo efectua a edição do objecto COM de um thread em segundo plano. Se fechar uma WFC ADO ligação , este coloca o apontador de interface do ADO ligações COM numa lista de ponteiros para futura limpeza pelo recolector de lixo. Se o código da aplicação principal subsequentemente fecha um conjunto de registos do ADO exactamente o mesmo tempo que o thread de fundo lixo Recolectores liberta o apontador de interface do ADO ligação principal, o AV pode ocorrer.

Propriedades

Artigo: 272373 - Última revisão: 7 de abril de 2006 - Revisão: 8.1
A informação contida neste artigo aplica-se a:
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.5 Service Pack 1
  • Microsoft Data Access Components 2.6
Palavras-chave: 
kbmt kbqfe kbhotfixserver kbbug kbfix kbmdac250sp2fix kbmdac260sp1fix KB272373 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: 272373

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