CORRECÇÃO: ADO 2.5 fugas de recursos quando utilizar a transmissão em sequência e objectos de registo

Traduções de Artigos Traduções de Artigos
Artigo: 282177 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Quando dados marshalling dentro do processo utilizando o ActiveX Data Objects (ADO) registo ou objectos de transmissão em sequência , uma fuga de memória podem ocorrer que eventualmente poderá causar o ficar sem memória do processo. Esta perda não ocorre com outros objectos ADO, tais como objectos de comandos e conjunto de registos .

Esta fuga ocorre no Microsoft Data Access Components (MDAC) 2.5 mas não ocorre no MDAC 2.6.

Causa

Os objectos de registo e sequência de utilizar a função de biblioteca de modelo de Active Directory (ATL) AtlMarshalPtrInProc para criar uma sequência que é utilizada para enviar informações de proxy para o autor da chamada. Quando os objectos de registo e transmissão em sequência são destruídos, a função de edição é simplesmente chamada na sequência, sem chamar primeiro a função AtlFreeMarshalStream para libertar a memória alocada para este ramo.

Resolução

MDAC

Para resolver este problema, obtenha o service pack mais recente do Microsoft MDAC 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
A versão inglesa desta correcção deverá ter os seguintes atributos de ficheiro ou posteriores:
   Date          Version        Size               File name
   ------------------------------------------------------------

   12/14/2000    2.53.6013.0    491,792 bytes      Msado15.dll	
	
				

Windows 2000

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
A versão inglesa desta correcção deverá ter os seguintes atributos de ficheiro ou posteriores:
   Date        Time    Version       Size       File name
   ----------------------------------------------------------
   5/29/2001   02:56p  2.52.6019.1   487,696    Msado15.dll
				

SOLUÇÃO

Não existe nenhuma solução para este problema com o MDAC 2.5.

Ponto Da Situação

MDAC

A Microsoft confirmou que este erro ocorre nos produtos da Microsoft listados no início deste artigo. Este problema foi corrigido pela primeira vez no MDAC 2.5 Service Pack 3.

Este problema não ocorre no MDAC 2.6.

Windows 2000

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 Windows 2000 Service Pack 3.

Mais Informação

Esta fuga de memória predominantemente ocorre em ambientes onde os objectos de registo ou a transmissão em sequência são organizado em processo, tais como Microsoft Internet Information Server (IIS) e Microsoft Transaction Server (MTS) / COM +. Esta perda não ocorre em ambientes onde este marshalling não ocorre, tal como um aplicação do Microsoft Visual Basic autónomo.

Passos para reproduzir o comportamento

  1. Cole o código de exemplo abaixo para um ficheiro de texto e guarde-o com o nome "ADODBMem.vbs".
  2. Na linha de comandos, execute este ficheiro utilizando o Windows Scripting Host (CScript.exe). Por exemplo:
    cscript ADODBMem.vbs
  3. Quando lhe for pedido, inicie o Monitor de desempenho (PerfMon) e seleccione o contador Private Bytes para CScript executável.
  4. Volte para o script e percorrer a criação de objectos ADO como indicado. Note que PerfMon mostra uma crescente quantidade de memória atribuída com objectos de registo e transmissão em sequência .

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 = 1000

Private 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 = True
End 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.ReadLine
End 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.ReadLine
End sub

Call Main()
Wscript.Quit 0

'//////////////////////////////////////////////////////////////////////////////////////////////// 
'                                  End of file "adodbmem.vbs"
'//////////////////////////////////////////////////////////////////////////////////////////////// 

				

Propriedades

Artigo: 282177 - Última revisão: 24 de fevereiro de 2014 - Revisão: 3.2
A informação contida neste artigo aplica-se a:
  • Microsoft Data Access Components 2.5 Service Pack 1
  • Microsoft Data Access Components 2.5
Palavras-chave: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbmdac250sp3fix kbado260fix kbbug kbfix kbmdac260fix kbwin2000sp3fix KB282177 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: 282177

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