FIX: Geheugenlek aggregeren ADO-Recordsets of opdrachten kan veroorzaken

Vertaalde artikelen Vertaalde artikelen
Artikel ID: 283106 - Bekijk de producten waarop dit artikel van toepassing is.
Dit artikel is gearchiveerd. Het wordt aangeboden in de huidige vorm en wordt niet meer bijgewerkt.
Alles uitklappen | Alles samenvouwen

Op deze pagina

Symptomen

Als een Visual C++ toepassingen of dynamic link aggregaten library (DLL) ActiveX Data Objects (ADO)Record setofOpdrachtobjecten een aanzienlijke geheugenlek kan optreden vanwege de bronnen die niet worden vrij gegeven wanneer deReleasefunctie wordt aangeroepen op het object.

Dit gebeurt in alle versies van ADO voorafgaand aan en inclusief versie 2. 6 RTM (2.60.6526).

Oorzaak

Aggregation inRecord setenOpdrachtobjecten wordt geïmplementeerd met behulp van deCComAggObjectklassen in Active Template Library (ATL).CComAggObjectverwijderd wanneer de referentie telling nul en verwijdert u simpelweg deRecord setofOpdrachtook object. HetRecord setofOpdrachtvan het objectTermfunctie is nooit genoemd, dat is waar het opschonen van toegewezen bronnen optreedt.

Oplossing

MDAC

Ophalen van het meest recente servicepack voor MDAC 2. 5 van Microsoft dit probleem op te lossen. Voor meer informatie klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
293312INFO: Het verkrijgen van de meest recente MDAC 2. 5 servicepack
Dit probleem is gecorrigeerd in Microsoft Data Access Components 2. 6 Service Pack 1.
Voor meer informatie klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
300635INFO: Het verkrijgen van de meest recente MDAC 2. 6 servicepack
De Engelse versie van deze correctie moet de volgende bestands ken merken of hoger:

MDAC 2. 5
   Date          Version        Size             File name
   ------------------------------------------------------------
   12/14/2000    2.53.6013.0     20,480 bytes    Msader15.dll	
   12/14/2000    2.53.6013.0    491,792 bytes    Msado15.dll	
   12/14/2000    2.53.6013.0    172,304 bytes    Msadomd.dll	
   12/14/2000    2.53.6013.0     57,616 bytes    Msador15.dll	
   12/14/2000    2.53.6013.0    188,688 bytes    Msadox.dll	
   12/14/2000    2.53.6013.0     57,616 bytes    Msadrh15.dll	   	
   12/14/2000    2.53.6013.0     94,480 bytes    Msjro.dll	
   12/22/2000                   824,744 bytes    Q283106_w2k_sp3_x86_en.exe
				

Status

MDAC

Microsoft heeft bevestigd dat dit is een probleem in de Microsoft-producten die aan het begin van dit artikel worden vermeld.Microsoft MDAC 2. 5 Service Pack 3 is voor het eerst een correctie aangebracht voor dit probleem.Microsoft Data Access Components 2. 6 Service Pack 1 werd voor het eerst een correctie aangebracht voor dit probleem.

Windows 2000

Microsoft heeft bevestigd dat dit is een probleem in de Microsoft-producten die aan het begin van dit artikel worden vermeld.

Meer informatie

Dit probleem is waarschijnlijk zijn alleen zichtbaar wanneer de toepassing is geschreven in Visual C++ en wanneer de ontwikkelaar opzettelijk aggregatenRecord setofOpdrachtobjecten. Dit probleem treedt niet op in Microsoft Visual Basic-toepassingen, omdat de samenvoeging is niet mogelijk vanuit Visual Basic.

De MDAC 2. 5-versie van deze hotfix kan worden toegepast op 2,5 RTM (2.50.4403) en 2. 5 SP1 (2.50.5303).

Stappen om het gedrag te reproduceren

  1. Plak de volgende code in een nieuwe console toepassing Visual C++ en vervolgens compileren en uitvoeren van de code.
    #include "objbase.h"
    #import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename( "EOF", "adoEOF" )
    
    struct InitOle {
      InitOle()  { ::CoInitialize(NULL); }
      ~InitOle() { ::CoUninitialize();   }
    } _init_InitOle_; 
    
    
    
    class MyClass : public IUnknown
    {
    public:
    	MyClass()
    	{
    		m_refCount = 0;
    	}
    
    	STDMETHODIMP_(ULONG) AddRef()
      {
    		m_refCount++;
    		return m_refCount;
      }
    
    	STDMETHODIMP_(ULONG) Release()
    	{
    		m_refCount--;
    		return m_refCount;
      }
    
    	STDMETHODIMP QueryInterface(REFIID riid, void **ppv)
    	{
    		if (riid == IID_IUnknown) {
    			*ppv = static_cast<IUnknown *> (this);
    			AddRef();
    			return S_OK;
    		}
    
    		return E_NOINTERFACE;
    	}
    
    private:
    	ULONG m_refCount;	
    };
    
    
    int main(int argc, char* argv[])
      {
    	MyClass cls;
    	HRESULT hr;
    	IUnknown *pUnkInner;
    
    	CoInitialize(NULL);
    	cls.AddRef();
    
    	for (int i=0; i<10000; i++)
    	{
    		//while (true) {
    		pUnkInner = NULL;
    		hr = CoCreateInstance(__uuidof(Recordset), &cls, CLSCTX_INPROC_SERVER, IID_IUnknown,
    			(void **) &pUnkInner);
    		pUnkInner->Release();
    	}
    	return 0;
    }
    					
  2. Start Prestatiemeter en selecteer de eigen Bytes, item voor de uitvoerbaar bestand uitvoeren. Opmerking: Er is dat een toenemende hoeveelheid geheugen toegewezen die is nooit vrij gegeven.

Eigenschappen

Artikel ID: 283106 - Laatste beoordeling: maandag 24 februari 2014 - Wijziging: 2.0
De informatie in dit artikel is van toepassing op:
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
Trefwoorden: 
kbnosurvey kbarchive kbhotfixserver kbqfe kbmdac250sp3fix kbbug kbfix kbmdac260sp1fix kbmt KB283106 KbMtnl
Automatisch vertaald artikel
BELANGRIJK: Dit artikel is vertaald door de vertaalmachine software van Microsoft in plaats van door een professionele vertaler. Microsoft biedt u professioneel vertaalde artikelen en artikelen vertaald door de vertaalmachine, zodat u toegang heeft tot al onze knowledge base artikelen in uw eigen taal. Artikelen vertaald door de vertaalmachine zijn niet altijd perfect vertaald. Deze artikelen kunnen fouten bevatten in de vocabulaire, zinsopbouw en grammatica en kunnen lijken op hoe een anderstalige de taal spreekt en schrijft. Microsoft is niet verantwoordelijk voor onnauwkeurigheden, fouten en schade ontstaan door een incorrecte vertaling van de content of het gebruik ervan door onze klanten. Microsoft past continue de kwaliteit van de vertaalmachine software aan door deze te updaten.
De Engelstalige versie van dit artikel is de volgende:283106

Geef ons feedback

 

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