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

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 282177 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Dieser Artikel wurde archiviert. Er wird im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.
Alles erweitern | Alles schließen

Auf dieser Seite

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

				

Eigenschaften

Artikel-ID: 282177 - Geändert am: Montag, 24. Februar 2014 - Version: 3.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Data Access Components 2.5 Service Pack 1
  • Microsoft Data Access Components 2.5
Keywords: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbmdac250sp3fix kbado260fix kbbug kbfix kbmdac260fix kbwin2000sp3fix KB282177 KbMtde
Maschinell übersetzter Artikel
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.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 282177
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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