FIX: ADO 레코드 집합 또는 명령 집계 메모리 누수가 발생한다

기술 자료 번역 기술 자료 번역
기술 자료: 283106 - 이 문서가 적용되는 제품 보기.
이 문서가 보관되었습니다. "그대로" 제공되었으며, 업데이트가 되지 않을 것입니다.
모두 확대 | 모두 축소

이 페이지에서

현상

Visual C++ 응용 프로그램 또는 동적 연결 라이브러리 (DLL) Recordset ADO (ActiveX 데이터 개체) 또는 명령 개체를 집계하는 경우 개체에 대한 릴리스 함수를 호출할 때 해제됩니다 않은 리소스가 상당한 메모리 누수가 발생할 수 있습니다.

모든 버전의 전에 ADO 및 포함 버전 2.6 RTM (2.60.6526) 발생합니다.

원인

레코드 집합명령 개체 집계 ATL (액티브 템플릿 라이브러리) CComAggObject 클래스를 사용하여 구현됩니다. 참조 횟수가 0으로 이동하고 단순히 레코드 또는 명령 개체를 삭제하는 경우 CComAggObject 자체를 삭제합니다. 레코드 또는 명령 개체의 용어 함수가 호출되지 있는 정리 할당된 리소스의 발생한 것입니다.

해결 방법

MDAC

이 문제를 해결하려면 Microsoft MDAC 2.5 최신 서비스 팩을 구하십시오. 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
293312정보: 최신 MDAC 2.5 구하는 방법 서비스 팩
이 문제는 Microsoft 데이터 액세스 구성 요소 2.6 서비스 팩 1에서 수정되었습니다.
자세한 내용은 아래 문서 번호를 눌러 Microsoft 기술 자료에 있는 문서를 클릭하십시오.
300635정보: 최신 MDAC 2.6 구하는 방법 서비스 팩
이 수정의 영어 버전은 다음 파일 특성을 가집니다 또는 나중에:

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
				

현재 상태

MDAC

Microsoft 문제는 이 문서의 시작 부분에 나열한 제품에서 문제를 확인했습니다. 이 문제는 Microsoft MDAC 2.5 서비스 팩 3에서 처음 해결되었습니다.이 문제는 Microsoft 데이터 액세스 구성 요소 2.6 서비스 팩 1에서 처음 수정되었습니다.

Windows 2000

Microsoft 문제는 이 문서의 시작 부분에 나열한 제품에서 문제를 확인했습니다.

추가 정보

이 동작은 응용 프로그램을 Visual C++ 에서 및 개발자가 고의로 레코드 또는 명령 개체를 집계합니다 때 기록된 경우에만 때 볼 수 있습니다. 집계 Visual Basic 수 있기 때문에 Visual Basic 응용 프로그램의 경우 이 문제가 발생하지 않습니다.

이 핫픽스의 MDAC 2.5를 버전 2.5 RTM (2.50.4403) 및 2.5 SP1 통해 적용할 수 있습니다 (2.50.5303).

문제를 재현하기 위한 단계

  1. 다음 코드를 새 Visual C++ 콘솔 응용 프로그램에 붙여넣 및 다음 컴파일하고 코드를 실행합니다.
    #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. 성능 모니터를 시작하고 실행 중인 실행 전용 바이트 카운터가 선택하십시오. 없는 메모리 양이 증가하고 할당된 참고 절대로 해제됩니다.

속성

기술 자료: 283106 - 마지막 검토: 2014년 2월 24일 월요일 - 수정: 3.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.1
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft Data Access Components 2.0
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
키워드:?
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbmdac250sp3fix kbbug kbfix kbmdac260sp1fix KB283106 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.

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