Você está offline; aguardando reconexão

CORRECÇÃO: ADO 2.5 vaza recursos ao usar objetos de registro e de fluxo

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: 282177
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sintomas
Quando dados empacotamento em processo usando ActiveX Data Objects (ADO) registro ou objetos de fluxo , um vazamento de memória podem ocorrer que pode fazer com eventualmente que o processo executar com memória insuficiente. Esse vazamento não ocorre com outros objetos do ADO, como objetos de comando e Recordset .

Esse vazamento ocorre no Microsoft Data Access Components (MDAC) 2.5, mas não ocorre no MDAC 2.6.
Causa
Os objetos Record e Stream use a função de ATL (Active Template Library) AtlMarshalPtrInProc para criar um fluxo é usado para enviar informações de proxy volta para o chamador. Quando os objetos Record e Stream são destruídos, a função de lançamento é chamada simplesmente no fluxo, sem primeiro chamar a função AtlFreeMarshalStream para liberar a memória alocada para este fluxo.
Resolução

MDAC

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:
   Date          Version        Size               File name   ------------------------------------------------------------   12/14/2000    2.53.6013.0    491,792 bytes      Msado15.dll						

Windows 2000

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
A versão em inglês dessa correção deve ter os seguintes atributos de arquivo ou posteriores:
   Date        Time    Version       Size       File name   ----------------------------------------------------------   5/29/2001   02:56p  2.52.6019.1   487,696    Msado15.dll				

SOLUÇÃO ALTERNATIVA

Não há nenhuma solução alternativa para esse problema com o MDAC 2.5.
Situação

MDAC

A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados no começo deste artigo. Esse problema foi corrigido primeiro no Microsoft MDAC 2.5 Service Pack 3.

Esse problema não ocorre no MDAC 2.6.

Windows 2000

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no começo deste artigo. Esse problema foi corrigido primeiro no Windows 2000 Service Pack 3.
Mais Informações
Esse vazamento de memória ocorre predominantemente em ambientes onde os objetos de registro ou fluxo são controlado em processo, como Microsoft Internet Information Server (IIS) e Microsoft Transaction Server (MTS) / COM +. Esse vazamento não ocorre em ambientes onde este empacotamento não ocorrerem, como um aplicativo do Microsoft Visual Basic autônomo.

Etapas para reproduzir o problema

  1. Cole o código de exemplo abaixo em um arquivo de texto e salvá-lo com o nome "ADODBMem.vbs".
  2. No prompt de comando, execute esse arquivo usando o host de scripts do Windows (CScript.exe). Por exemplo:
    cscript ADODBMem.vbs
  3. Quando solicitado, inicie o desempenho do sistema (PerfMon) e selecione o contador Private Bytes para o CScript executável.
  4. Retorne para o script e depurar a criação de objetos DAO, conforme indicado. Observe que o desempenho mostra uma quantidade crescente de memória alocada com objetos Record e Stream .

Código de exemplo

'//////////////////////////////////////////////////////////////////////////////////////////////// ' +'   File:       adodbmem.vbs''   Copyright:  (c) 2000 Microsoft Corporation''   Contents:   Creates/destroys ADODB objects and allows to see memory usage (leaks).''   Comments:   CScript.exe v2.0 required (comes with Windows 2000; just copy to run under NT4)'               WScript.exe will NOT work''               Usage: cscript adodbmem.vbs'               Use PerfMon to see the counter "Private Bytes" in process "cscript"' -'//////////////////////////////////////////////////////////////////////////////////////////////// Const REPT_CNT = 1000Private Function CreateOnce(objName, bStop)  Dim obj  On Error Resume Next  If bStop = True Then    WScript.StdOut.Write  "Create an instance of " & objName & ">"    WScript.StdIn.ReadLine  End If  Set obj = CreateObject(objName)  If Err.Number <> 0 Then    WScript.Echo "CreateObject(" & objName &") failed: " & Err.Description    CreateOnce = False    Exit Function  End If  If bStop = True Then    WScript.StdOut.Write objName & " created. Destroy>"    WScript.StdIn.ReadLine  End If  Set obj = Nothing  If bStop = True Then    WScript.Echo objName & " destroyed."  End If  CreateOnce = TrueEnd Function'//////////////////////////////////////////////////////////////////////////////////////////////// Private Sub TryObject(objName)  Dim i  WScript.StdOut.Write "Create and destroy " & objName & " " & REPT_CNT & " times>"  WScript.StdIn.ReadLine  For i = 1 To REPT_CNT    If Not CreateOnce(objName, False) Then Exit For  Next  WScript.StdOut.Write "Done. "End Sub'//////////////////////////////////////////////////////////////////////////////////////////////// Private Sub ShowVersion  Dim sVer  Dim o  Set o = CreateObject("ADODB.Connection")  sVer = o.Version  Set o = Nothing  WScript.StdOut.Write "ADODB version " & sVer & " loaded. Hit Enter to start>"  WScript.StdIn.ReadLineEnd Sub'//////////////////////////////////////////////////////////////////////////////////////////////// Public sub Main()  WScript.StdOut.Write "ADODB memory leak test." & vbNewLine & _                "Connect Perfmon: process - cscript, counters - Private Bytes." & vbNewLine & _                "Hit Enter then ready>"  WScript.StdIn.ReadLine  ShowVersion  TryObject "ADODB.Command"  TryObject "ADODB.Stream"  TryObject "ADODB.Recordset"  TryObject "ADODB.Record"  WScript.StdOut.Write "All Done. Hit Enter to exit>"  WScript.StdIn.ReadLineEnd subCall Main()Wscript.Quit 0'//////////////////////////////////////////////////////////////////////////////////////////////// '                                  End of file "adodbmem.vbs"'//////////////////////////////////////////////////////////////////////////////////////////////// 				
empacotar kbMDAC empacotamento empacotado

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 282177 - Última Revisão: 02/24/2014 12:42:52 - Revisão: 3.2

Microsoft Data Access Components 2.5 Service Pack 1, Microsoft Data Access Components 2.5

  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbmdac250sp3fix kbado260fix kbbug kbfix kbmdac260fix kbwin2000sp3fix KB282177 KbMtpt
Comentários