REVISIÓN: ADO 2.5 pérdidas de recursos al usar la secuencia y objetos de registro

Seleccione idioma Seleccione idioma
Id. de artículo: 282177 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

En esta página

Síntomas

Cuando cálculo de referencias de datos en proceso con registros de ActiveX Data Objects (ADO) o objetos de secuencia , una pérdida de memoria pueden producirse puede producir finalmente que el proceso a quedarse sin memoria. Esta pérdida no ocurre con otros objetos de ADO, como objetos Command y Recordset .

Esta pérdida se produce en Microsoft Data Access Components (MDAC) 2.5 pero no en MDAC 2.6.

Causa

Los objetos Record y Stream utilizan la función de Active Template Library (ATL) AtlMarshalPtrInProc para crear una secuencia que se utiliza para enviar información de proxy al llamador. Cuando se destruyen los objetos Record y Stream , la función de versión se denomina simplemente en la secuencia sin llamar primero a la función AtlFreeMarshalStream para liberar la memoria asignada para esta secuencia.

Solución

MDAC

Para resolver este problema, obtenga el service pack más reciente de Microsoft MDAC 2.5. Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
293312INFO: Cómo obtener la más reciente de MDAC 2.5 Service Pack
La versión en inglés de esta revisión debe tener los atributos de archivo siguientes o posteriores:
   Date          Version        Size               File name
   ------------------------------------------------------------

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

Windows 2000

Para resolver este problema, obtenga el Service Pack más reciente de Windows 2000. Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
260910Cómo obtener el Service Pack más reciente para Windows 2000
La versión en inglés de esta revisión debe tener los atributos de archivo siguientes o posteriores:
   Date        Time    Version       Size       File name
   ----------------------------------------------------------
   5/29/2001   02:56p  2.52.6019.1   487,696    Msado15.dll
				

SOLUCIÓN

No hay ninguna solución para este problema con MDAC 2.5.

Estado

MDAC

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados al principio de este artículo. Este problema se corrigió por primera vez en MDAC 2.5 Service Pack 3 de Microsoft.

Este problema no se produce en MDAC 2.6.

Windows 2000

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft enumerados en la sección "La información de este artículo se refiere a:" de este artículo. Este problema se corrigió por primera vez en el Service Pack 3 de Windows 2000.

Más información

Se produce esta pérdida de memoria principalmente en entornos donde los objetos Record o Stream se calcula en proceso, como Internet Information Server (IIS) y Transaction Server (MTS) o COM +. Esta pérdida no se produce en entornos donde este cálculo de referencias no ocurre, como una aplicación de Microsoft Visual Basic independiente.

Pasos para reproducir este comportamiento

  1. Pegue el código de ejemplo siguiente en un archivo de texto y guárdelo con el nombre "ADODBMem.vbs".
  2. Desde el símbolo del sistema, ejecute este archivo utilizando a Windows Scripting Host (CScript.exe). Por ejemplo:
    cscript ADODBMem.vbs
  3. Cuando se le solicite, inicie a Monitor (PerfMon) y seleccione el contador bytes privados para el ejecutable de CScript.
  4. Vuelva a la secuencia de comandos y recorrer la creación de los objetos de ADO como se indica. Tenga en cuenta que Monitor de rendimiento muestra una cantidad creciente de memoria asignada con objetos Record y Stream .

Código de ejemplo

'//////////////////////////////////////////////////////////////////////////////////////////////// 
' +
'   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"
'//////////////////////////////////////////////////////////////////////////////////////////////// 

				

Propiedades

Id. de artículo: 282177 - Última revisión: lunes, 24 de febrero de 2014 - Versión: 3.2
La información de este artículo se refiere a:
  • Microsoft Data Access Components 2.5 Service Pack 1
  • Microsoft Data Access Components 2.5
Palabras clave: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbmdac250sp3fix kbado260fix kbbug kbfix kbmdac260fix kbwin2000sp3fix KB282177 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 282177

Enviar comentarios

 

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