Oprava: ADO 2.5 nevrací zdroje při použití Stream a záznam objektů

Překlady článku Překlady článku
ID článku: 282177 - Produkty, které se vztahují k tomuto článku.
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Příznaky

Nakonec při mezipaměti sdružených dat dat v procesu pomocí záznamů ActiveX Data Objects (ADO) nebo toku objektů nevracení paměti může dojít, může způsobit proces nedostatek paměti. Toto nevracení nedochází s jinými objekty ADO například Příkazy a Recordset objekty.

Toto nevracení dochází v Microsoft Data Access Components (MDAC) 2.5 ale nedochází v MDAC 2.6.

Příčina

Záznam a Stream objekty pomocí funkce Active Template Library (ATL) AtlMarshalPtrInProc vytvořit datový proud, který slouží k odeslání informace o proxy serveru volající. Při záznamu a Stream objekty jsou zničeny, funkce Release jednoduše nazývá na proud, bez volání funkce AtlFreeMarshalStream uvolnit paměť přidělená pro tento datový proud.

Řešení

Součásti MDAC

Tento problém vyřešíte pomocí nejnovější aktualizace service pack pro Microsoft MDAC 2.5. Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:
293312INFORMACE: Jak získat nejnovější MDAC 2.5 Service Pack
Anglická verze této opravy má následující nebo vyšší atributy souborů:
   Date          Version        Size               File name
   ------------------------------------------------------------

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

WINDOWS 2000

Tento problém vyřešíte pomocí nejnovější aktualizace service pack pro systém Windows 2000. Další informace získáte v následujícím článku znalostní báze Microsoft Knowledge Base:
260910Jak získat nejnovější aktualizaci Service Pack pro systém Windows 2000
Anglická verze této opravy má následující atributy souborů nebo novější:
   Date        Time    Version       Size       File name
   ----------------------------------------------------------
   5/29/2001   02:56p  2.52.6019.1   487,696    Msado15.dll
				

Možné řešení

Neexistuje žádné řešení tohoto problému s součásti MDAC 2.5.

Prohlášení

Součásti MDAC

Společnost Microsoft potvrzuje, že se jedná o chybu v produktech společnosti uvedených na začátku tohoto článku. Tento problém byl poprvé opraven v aktualizaci Service Pack 3 pro MDAC 2.5.

Tento problém nenastává v MDAC 2.6.

WINDOWS 2000

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny na začátku tohoto článku. Tento problém byl poprvé opraven aktualizací Windows 2000 Service Pack 3.

Další informace

Toto nevracení paměti predominantly dochází v prostředích, kde jsou objekty záznam nebo proud zařazenými v procesu, jako je například Internet Information Server (IIS) a Microsoft Transaction Server (MTS) / COM +. Toto nevracení nedochází v prostředích, kde tato zařazovací nedojde, například samostatnou aplikaci Microsoft Visual Basic.

Kroky pro reprodukci chování

  1. Ukázkový kód pod vložit do textového souboru a uložte s názvem "ADODBMem.vbs".
  2. Z příkazového řádku spusťte tento soubor pomocí prostředí Windows Scripting Host (CScript.exe). Například:
    cscript ADODBMem.vbs
  3. Po výzvě spusťte sledování výkonu (PerfMon) a vyberte čítač nesdílených bajtů spustitelný CScript.
  4. Vrátit do skriptu a Krokovat vytváření objektů ADO označeno. Poznámka: PerfMon ukazuje rostoucí množství paměti přidělené záznam a Stream objekty.

Ukázkový kód

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

				

Vlastnosti

ID článku: 282177 - Poslední aktualizace: 28. února 2014 - Revize: 3.2
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Data Access Components 2.5 Service Pack 1
  • Microsoft Data Access Components 2.5
Klíčová slova: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbmdac250sp3fix kbado260fix kbbug kbfix kbmdac260fix kbwin2000sp3fix KB282177 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:282177

Dejte nám zpětnou vazbu

 

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