CORRECÇÃO: vazamento de memória virtual com grande número de conjuntos de registros simultaneamente abrir

Traduções deste artigo Traduções deste artigo
ID do artigo: 312575 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Um aplicativo ou serviço com números grandes (mais de 500) de simultaneamente abrir conjuntos de ActiveX Data Objects (ADO) registros que são abertos e fechados com freqüência pode enfrentar um vazamento de memória virtual que leva a fragmentação da memória e erros de falta de memória.

Esse problema pode ocorrer em qualquer versão do Microsoft Data Access Components (MDAC) entre 2.5 RTM (2.50.4403.12) e SP1 2.6 (2.61.7326.6). Esse problema não ocorre no MDAC 2.7.

Esse problema não é específico do provedor; ele pode ocorrer com o provedor nativo do SQL Server (SQLOLEDB.dll), o provedor nativo Oracle (msdaora.dll), o provedor ODBC (MSDASQL.dll), o mecanismo de cursor do cliente e qualquer componente que usa o código de memória compartilhada.

Causa

Quando conjuntos de registros são liberados, as rotinas de gerenciamento de memória MDAC salvar memória alocados para eles em uma lista de "aparência-aside" em vez de realmente liberar a memória. Isso é feito para evitar a sobrecarga contraída pelo liberando completamente e realocar a memória.

Por padrão, o código de gerenciamento de memória compartilhada usado pelo MDAC 2.5 (Msdatl2.dll) e o MDAC 2.6 (Msdatl3.dll) irá salvar até 500 dessas alocações; nada sobre essa quantidade é liberado através de chamadas para a função VirtualFree .

Um erro de codificação no código de gerenciamento de memória faz uma chamada incorreta para VirtualFree , para que a memória, na verdade, não é liberada. O código de retorno de VirtualFree não está marcado e o aplicativo não recebe nenhuma indicação de que a memória foi perdida.

Resolução

Para resolver esse problema, obtenha o service pack mais recente para o Microsoft MDAC 2.5. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
293312INFO: Como obter o último MDAC 2.5 Service Pack
A versão em inglês dessa correção deve ter os seguintes atributos de arquivo ou posteriores:

MDAC 2.5 SP2
   Date          Version      Size      File name     
   -------------------------------------------------
   25-Oct-2001   2.52.8025.0   78,096   Msdatl2.dll		
   25-Oct-2001   2.52.8025.0   53,520   Msdatt.dll		
   25-Oct-2001   2.52.8025.0  303,376   Msdasql.dll	
   25-Oct-2001   2.52.8025.0   16,384   Msdasqlr.dll
   15-Nov-2001                          Q312575_MDAC25_SP2_x86_en.exe
				
para o MDAC 2.5 somente: Para resolver esse problema, obtenha o service pack mais recente para o Windows 2000. Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
260910Como obter o Service Pack mais recente do Windows 2000
MDAC 2.6 SP1
   Date          Version      Size      File name     
   -------------------------------------------------
   25-Oct-2001   2.61.8025.0   94,480   Msdatl3.dll	
   25-Oct-2001   2.61.8025.0   24,848   Msdatt.dll	
   25-Oct-2001   2.61.8025.0  307,472   Msdasql.dll	
   25-Oct-2001   2.61.8025.0   16,384   Msdasqlr.dll
   15-Nov-2001                          Q312575_MDAC26_SP1_x86_en.exe	
				

Como Contornar

Para contornar esse problema, você pode criar seu aplicativo ou serviço para que menos de 500 conjuntos de registros sejam abertos simultaneamente.

Você pode aliviar o problema ajustando as seguintes configurações no Registro:
    HKLM\Software\Microsoft\MDAC         MaxReservedBlocks
    HKLM\Software\Microsoft\MDAC         ReservedMemorySize
				
Observação que essas entradas do Registro não existem por padrão; você precisa, em seguida, adicionar manualmente. Ambas as entradas são valores DWORD.

O valor padrão para MaxReservedBlocks é 500. Se você aumentar esse valor, mais blocos serão salva na lista de exceção de aparência do Gerenciador de memória (e portanto incorrer em mais uso de memória no aplicativo) mas os blocos serão reutilizados. Se você diminuir esse valor, aumentará a taxa na qual memória é perdida.

O valor padrão para ReservedMemorySize é 1 MB. Você pode diminuir esse valor para limitar o tamanho de alocações de memória virtual; no entanto, isso pode diminuir o desempenho se for necessária mais memória que o que está disponível em blocos de memória.

Situação

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

MDAC 2.5

Esse problema foi corrigido primeiro no Microsoft MDAC 2.5 Service Pack 3.Esse problema foi corrigido primeiro no Windows 2000 Service Pack 3.

Mais Informações

No MDAC 2.5, as alocações de memória perdida será consistir inteiramente de memória reservada e terá não confirmadas páginas; por exemplo:
08230000,      Private,    1048576,     1, -RW-,     
     08230000, Reserve,    1048576,,       -RW- --,
08330000,      Private,    1048576,     1, -RW-,     
     08330000, Reserve,    1048576,,       -RW- --,
08430000,      Private,    1048576,     1, -RW-,     
     08430000, Reserve,    1048576,,       -RW- --,
08530000,      Private,    1048576,     1, -RW-,     
     08530000, Reserve,    1048576,,       -RW- --,
				
no MDAC 2.6 as alocações de memória perdida irão conter pelo menos 10 KB (65536 bytes) de confirmada páginas; por exemplo:
1BF60000,      Private,    1048576,     2, -RW-,     
     1BF60000, Private,      65536,,       -RW- --,
     1BF70000, Reserve,     983040,,       -RW- --,
1C060000,      Private,    1048576,     2, -RW-,     
     1C060000, Private,      65536,,       -RW- --,
     1C070000, Reserve,     983040,,       -RW- --,
1C160000,      Private,    1048576,     2, -RW-,     
     1C160000, Private,      65536,,       -RW- --,
     1C170000, Reserve,     983040,,       -RW- --,
				
em ambos os casos, o monitoramento da aplicativo ou serviço com o Monitor de desempenho mostra um uso excessivo de bytes virtuais.

Propriedades

ID do artigo: 312575 - Última revisão: segunda-feira, 24 de fevereiro de 2014 - Revisão: 4.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.5 Service Pack 2
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.6 Service Pack 1
Palavras-chave: 
kbnosurvey kbarchive kbmt kbqfe kbhotfixserver kbmdac250sp3fix kbbug kbfix kbmdac260fix kbwin2000sp3fix KB312575 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 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: 312575

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