FIX: ADO 2.5 perdite di risorse quando si utilizzano oggetti di record e Stream

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

282177
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
Sintomi
Quando i dati di marshalling in-process utilizzando ActiveX Data Objects (ADO) record o oggetti Stream , una perdita di memoria possono verificarsi che eventualmente possibile si verifichi il processo di memoria. Questo problema non si verifica con altri oggetti ADO quali gli oggetti Command e Recordset .

Questo problema si verifica in Microsoft Data Access Components (MDAC) 2.5 ma non in MDAC 2.6.
Cause
Gli oggetti record e Stream consente di utilizzare la funzione di libreria ATL (Active Template Library) AtlMarshalPtrInProc per creare un flusso che viene utilizzato per inviare le informazioni proxy al chiamante. Quando vengono eliminati gli oggetti record e Stream , senza prima chiamare la funzione AtlFreeMarshalStream per liberare la memoria allocata per il flusso viene chiamata sul flusso, semplicemente la funzione di rilascio .
Risoluzione

MDAC

Per risolvere il problema, ottenere il service pack più recente per Microsoft MDAC 2.5. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
293312INFORMAZIONI: Come ottenere il più recente MDAC 2.5 Service Pack
La versione inglese di questa correzione deve essere di avere i seguenti attributi di file o versioni successive:
   Date          Version        Size               File name   ------------------------------------------------------------   12/14/2000    2.53.6013.0    491,792 bytes      Msado15.dll						

Windows 2000

Per risolvere questo problema è necessario ottenere la versione più recente del service pack per Windows 2000. Per ulteriori informazioni, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
260910Come ottenere Windows 2000 Service Pack più recente
La versione inglese di questa correzione deve essere di avere i seguenti attributi di file o versioni successive:
   Date        Time    Version       Size       File name   ----------------------------------------------------------   5/29/2001   02:56p  2.52.6019.1   487,696    Msado15.dll				

PER RISOLVERE IL PROBLEMA

Non è disponibile alcuna soluzione per questo problema con MDAC 2.5.
Status

MDAC

Microsoft ha confermato che questo un bug nei prodotti Microsoft elencati all'inizio di questo articolo. Questo problema è stato innanzitutto corretto in Microsoft MDAC 2.5 Service Pack 3.

Questo problema non si verifica in MDAC 2.6.

Windows 2000

Microsoft ha confermato che questo problema riguarda i prodotti Microsoft elencati all'inizio di questo articolo. Questo problema è stato innanzitutto corretto in Windows 2000 Service Pack 3.
Informazioni
Si verifica questo problema di memoria principalmente in ambienti in cui gli oggetti record o Stream sono marshalled in-process, ad esempio Internet Information Server (IIS) e Microsoft Transaction Server (MTS) / COM +. Questo problema non si verifica in ambienti in cui questo tipo di marshalling non si verifica, ad esempio un computer autonomo applicazione di Microsoft Visual Basic.

Procedura per riprodurre il problema

  1. Incollare il codice di esempio riportato di seguito in un file di testo e salvarlo con il nome "ADODBMem.vbs".
  2. Dal prompt dei comandi, eseguire questo file utilizzando Windows Scripting Host (CScript.exe). Ad esempio:
    cscript ADODBMem.vbs
  3. Quando richiesto, avviare Performance Monitor (PerfMon) e selezionare il contatore Byte privati per il file eseguibile CScript.
  4. Tornare allo script e il passaggio tramite la creazione di oggetti ADO come indicato. Si noti che PerfMon Mostra una crescente quantità di memoria allocata con gli oggetti record e Stream .

Codice di esempio

'//////////////////////////////////////////////////////////////////////////////////////////////// ' +'   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"'//////////////////////////////////////////////////////////////////////////////////////////////// 				
il marshalling di marshalling kbMDAC marshalling

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 282177 - Ultima revisione: 02/24/2014 00:50:02 - Revisione: 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 KbMtit
Feedback