Update: ADO 2.5 verliert Ressourcen, wenn Record-Objekte und Stream verwenden

Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.

282177
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Problembeschreibung
Beim marshalling von Daten in-Process mit ActiveX Data Objects (ADO)- Datensatz oder Stream -Objekten, ein Speicherverlust können auftreten, können schließlich zu der Prozess nicht genügend Arbeitsspeicher verfügbar führen. Dieser Speicherverlust tritt nicht mit anderen ADO-Objekten, z. B. Befehl und Recordset -Objekte.

Dieser Speicherverlust tritt auf, in Microsoft Data Access Components (MDAC) 2.5 jedoch tritt nicht auf MDAC 2.6.
Ursache
Die Record und Stream -Objekte verwenden die ATL (Active Template Library) AtlMarshalPtrInProc -Funktion einen Stream erstellen, der Proxyinformationen an den Aufrufer senden verwendet wird. Wenn die Objekte Record und Stream zerstört werden, wird die Release -Funktion einfach im Stream) aufgerufen, ohne den ersten Aufruf der AtlFreeMarshalStream -Funktion, die für diesen Stream reservierten Arbeitsspeicher freizugeben.
Lösung

MDAC

Installieren Sie das neueste Servicepack für Microsoft MDAC 2.5, um dieses Problem zu beheben. Weitere Informationen finden Sie die folgende KB-Artikelnummer:
293312INFO: Wie erhalten Sie die neueste MDAC 2.5 Servicepack
Die englische Version dieses Updates sollte die folgenden Dateiattribute (oder höher) aufweisen:
   Date          Version        Size               File name   ------------------------------------------------------------   12/14/2000    2.53.6013.0    491,792 bytes      Msado15.dll						

Windows 2000

Installieren Sie das neueste Service Pack für Windows 2000, um dieses Problem zu beheben. Weitere Informationen finden Sie die folgende KB-Artikelnummer:
260910Wie Sie das neueste Service Pack für Windows 2000 erhalten
Die englische Version dieses Updates müsste die folgenden Dateiattribute oder höher:
   Date        Time    Version       Size       File name   ----------------------------------------------------------   5/29/2001   02:56p  2.52.6019.1   487,696    Msado15.dll				

PROBLEMUMGEHUNG

Es gibt keine Problemumgehung für dieses Problem mit MDAC 2.5.
Status

MDAC

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel Microsoft-Produkten handelt. Dieses Problem wurde erstmals im Microsoft MDAC 2.5 Service Pack 3.

Dieses Problem tritt nicht in MDAC 2.6.

Windows 2000

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt. Dieses Problem wurde erstmals in Windows 2000 Service Pack 3 behoben.
Weitere Informationen
Dieser Speicherverlust tritt vorwiegend in Umgebungen mit den Datensatz oder Stream Objekte marshalled in-Prozess, z. B. Microsoft Internet Information Server (IIS) und Microsoft Transaction Server (MTS) / com+. Dieser Speicherverlust tritt nicht in Umgebungen, in denen dieser marshalling nicht, wie z. B. einer eigenständigen Microsoft Visual Basic-Anwendung auftritt.

Schritte zum Reproduzieren des Verhaltens

  1. Einfügen des Beispielcodes weiter unten in eine Textdatei, und mit dem Namen "ADODBMem.vbs" speichern.
  2. An der Eingabeaufforderung mithilfe der Windows Scripting Host (CScript.exe) Ausführen dieser Datei. Beispiel:
    Cscript ADODBMem.vbs
  3. Wenn Sie dazu aufgefordert werden, starten Sie den Systemmonitor (PerfMon), und wählen Sie den Leistungsindikator Private Bytes für die ausführbare CScript.
  4. Zurück an das Skript und Schritt durch die Erstellung der ADO-Objekte, wie angegeben. Beachten Sie, dass PerfMon einer wachsenden Speichermenge mit Record und Stream -Objekten anzeigt.

Beispielcode

'//////////////////////////////////////////////////////////////////////////////////////////////// ' +'   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"'//////////////////////////////////////////////////////////////////////////////////////////////// 				
KbMDAC Marshallen Marshalling gemarshallt

Warnung: Dieser Artikel wurde automatisch übersetzt

Eigenschaften

Artikelnummer: 282177 – Letzte Überarbeitung: 02/24/2014 05:56:31 – Revision: 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 KbMtde
Feedback