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

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.

282177
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
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 = 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"'//////////////////////////////////////////////////////////////////////////////////////////////// 				
calcular referencias de cálculo kbMDAC cálculo de referencias

Advertencia: este artículo se ha traducido automáticamente

Propiedades

Id. de artículo: 282177 - Última revisión: 02/24/2014 03:22:48 - Revisión: 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 KbMtes
Comentarios