FIX: perdita di memoria virtuale con un numero elevato di oggetti Recordset simultaneo Apri

Traduzione articoli Traduzione articoli
Identificativo articolo: 312575 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo Ŕ stato archiviato. L?articolo, quindi, viene offerto ?cosý come Ŕ? e non verrÓ pi¨ aggiornato.
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Un'applicazione o un servizio con un numero elevato (pi¨ di 500) recordset ActiveX Data Objects (ADO) simultaneamente aperti che sono aperto e chiuso spesso potrebbe verificarsi una perdita di memoria virtuale che consente la frammentazione della memoria ed errori di esaurimento della memoria.

Questo problema pu˛ verificarsi in qualsiasi versione di Microsoft Data Access Components (MDAC) tra 2,5 RTM (2.50.4403.12) e SP1 2.6 (2.61.7326.6). Questo problema non si verifica in MDAC 2.7.

Questo problema non Ŕ specifico del provider, pu˛ verificarsi con il provider nativo di SQL Server (SQLOLEDB.dll), il provider Oracle nativo (Msdaora.dll), il provider ODBC (MSDASQL.dll), il motore del cursore client e qualsiasi componente che utilizza il codice di memoria condivisa.

Cause

Quando vengono rilasciati i recordset, le routine di gestione memoria MDAC salvare la memoria allocata per essi in un elenco di "look-aside" anzichÚ effettivamente liberare la memoria. Questa operazione viene eseguita per evitare il sovraccarico generato dalla completamente liberare e riallocazione di memoria.

Per impostazione predefinita, il codice di gestione di memoria condivisa utilizzato da MDAC 2.5 (Msdatl2.dll) e MDAC 2.6 (Msdatl3.dll) verrÓ salvato fino a 500 di queste allocazioni, nulla in tale intervallo viene liberato tramite chiamate alla funzione VirtualFree .

Un errore di codifica nel codice di gestione memoria effettua una chiamata non corretta a VirtualFree , in modo che la memoria non viene effettivamente rilasciata. Il codice restituito da VirtualFree non Ŕ selezionato e l'applicazione non riceve alcuna indicazione che la memoria Ŕ stato perso.

Risoluzione

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:

MDAC 2.5 SP2
   Date          Version      Size      File name     
   -------------------------------------------------
   25-Oct-2001   2.52.8025.0   78,096   Msdatl2.dll		
   25-Oct-2001   2.52.8025.0   53,520   Msdatt.dll		
   25-Oct-2001   2.52.8025.0  303,376   Msdasql.dll	
   25-Oct-2001   2.52.8025.0   16,384   Msdasqlr.dll
   15-Nov-2001                          Q312575_MDAC25_SP2_x86_en.exe
				
per MDAC 2.5 solo: 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
MDAC 2.6 SP1
   Date          Version      Size      File name     
   -------------------------------------------------
   25-Oct-2001   2.61.8025.0   94,480   Msdatl3.dll	
   25-Oct-2001   2.61.8025.0   24,848   Msdatt.dll	
   25-Oct-2001   2.61.8025.0  307,472   Msdasql.dll	
   25-Oct-2001   2.61.8025.0   16,384   Msdasqlr.dll
   15-Nov-2001                          Q312575_MDAC26_SP1_x86_en.exe	
				

Workaround

Per risolvere questo problema, Ŕ possibile progettare l'applicazione o servizio in modo che inferiore a 500 recordset aperti contemporaneamente.

╚ possibile risolvere il problema regolando le impostazioni seguenti nel Registro di sistema:
    HKLM\Software\Microsoft\MDAC         MaxReservedBlocks
    HKLM\Software\Microsoft\MDAC         ReservedMemorySize
				
nota che queste voci del Registro di sistema non sono disponibili per impostazione predefinita; Ŕ necessario quindi aggiungere manualmente. Entrambe le voci sono valori DWORD.

Il valore predefinito MaxReservedBlocks Ŕ 500. Se si aumenta tale valore, ulteriori blocchi verranno salvati nell'elenco look-aside del gestore della memoria (e comportano pertanto maggiore utilizzo della memoria dell'applicazione) ma verranno riutilizzati i blocchi. Se si riduce il valore, si aumenterÓ la velocitÓ con cui perdita memoria.

Il valore predefinito per ReservedMemorySize Ŕ 1 MB. ╚ possibile ridurre questo valore per limitare le dimensioni delle allocazioni di memoria virtuale; tuttavia, questo potrebbe influire sulle prestazioni se maggiore quantitÓ di memoria Ŕ richiesto da che cosa Ŕ disponibile nei blocchi di memoria.

Status

Microsoft ha confermato che questo problema riguarda i prodotti Microsoft elencati all'inizio di questo articolo.

MDAC 2.5

Questo problema Ŕ stato innanzitutto corretto in Microsoft MDAC 2.5 Service Pack 3.Questo problema Ŕ stato innanzitutto corretto in Windows 2000 Service Pack 3.

Informazioni

In MDAC 2.5, le allocazioni di memoria persa sarÓ costituito memoria riservata e non avrÓ Nessuna pagina di cui Ŕ stato eseguito il commit, ad esempio:
08230000,      Private,    1048576,     1, -RW-,     
     08230000, Reserve,    1048576,,       -RW- --,
08330000,      Private,    1048576,     1, -RW-,     
     08330000, Reserve,    1048576,,       -RW- --,
08430000,      Private,    1048576,     1, -RW-,     
     08430000, Reserve,    1048576,,       -RW- --,
08530000,      Private,    1048576,     1, -RW-,     
     08530000, Reserve,    1048576,,       -RW- --,
				
in MDAC 2.6 le allocazioni di memoria persa conterrÓ almeno 10 KB (65536 byte) di commit pagine, ad esempio:
1BF60000,      Private,    1048576,     2, -RW-,     
     1BF60000, Private,      65536,,       -RW- --,
     1BF70000, Reserve,     983040,,       -RW- --,
1C060000,      Private,    1048576,     2, -RW-,     
     1C060000, Private,      65536,,       -RW- --,
     1C070000, Reserve,     983040,,       -RW- --,
1C160000,      Private,    1048576,     2, -RW-,     
     1C160000, Private,      65536,,       -RW- --,
     1C170000, Reserve,     983040,,       -RW- --,
				
in entrambi i casi, monitoraggio l'applicazione o il servizio con prestazioni Ŕ illustrato un utilizzo eccessivo di byte virtuali.

ProprietÓ

Identificativo articolo: 312575 - Ultima modifica: lunedý 24 febbraio 2014 - Revisione: 4.1
Le informazioni in questo articolo si applicano a:
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.5 Service Pack 1
  • Microsoft Data Access Components 2.5 Service Pack 2
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.6 Service Pack 1
Chiavi:á
kbnosurvey kbarchive kbmt kbqfe kbhotfixserver kbmdac250sp3fix kbbug kbfix kbmdac260fix kbwin2000sp3fix KB312575 KbMtit
Traduzione automatica articoli
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.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 312575
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

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