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

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.

282177
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
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 = 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 de referências de empacotamento de referências

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 282177 - Última Revisão: 02/24/2014 05:56:31 - 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
Esta informação foi útil?