ИСПРАВЛЕНИЕ: Статистической обработки набора записей ADO или команды может привести К утечке памяти

Переводы статьи Переводы статьи
Код статьи: 283106 - Vizualiza?i produsele pentru care se aplic? acest articol.
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Развернуть все | Свернуть все

В этой статье

Проблема

Если Visual C++ приложения или динамически подключаемой библиотеки (DLL) объединяет объекты данных ActiveX (ADO) Набор записей -или- Команда объекты, существенные утечка могут возникать по ресурсам, которые не освобождаются, когда Выпуск функция вызывается для объекта.

Это происходит во всех версиях ADO до и включая версии 2.6 RTM (2.60.6526).

Причина

Объединение в Набор записей и Команда объекты реализуется с помощью CComAggObject классы в Active Template Library (ATL). CComAggObject удаляет себя, когда счетчик ссылок на него становится равным нулю, а просто удаляет Набор записей -или- Команда Объект, а также. В Набор записей -или- Команда объекта Термин никогда не вызывается функция, которой является, где происходит очистка выделенных ресурсов.

Решение

КОМПОНЕНТЫ MDAC

Для решения этой проблемы, получите последний пакет обновления для Microsoft MDAC 2.5. Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
293312ИНФОРМАЦИЯ: Как получить последнюю версию компонентов MDAC 2.5 с пакетом обновления
Эта ошибка была исправлена в Майкрософт данных Microsoft Access компоненты 2.6 пакетом обновления 1.
Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
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, перечисленных в начале данной статьи. Сначала исправление этой проблемы появилось в пакете обновления 3 (Sp3) для MDAC 2.5. Сначала исправление этой проблемы появилось в Майкрософт данные доступа компонентов 2.6 пакетом обновления 1.

Windows 2000

Корпорация Майкрософт подтверждает, что это проблема в продуктах Microsoft, перечисленных в начале данной статьи.

Дополнительная информация

Данное поведение является скорее всего видели только тогда, когда приложение будет написано в Visual C++ и разработчик намеренно объединяет Набор записей -или- Команда объекты. Это происходит в приложениях Microsoft Visual Basic, поскольку объединение не возможно с помощью Visual Basic.

Версия данного обновления для MDAC 2.5 может применяться 2,5 RTM (2.50.4403) и 2.5 с пакетом обновления 1 (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 - Последний отзыв: 21 февраля 2014 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Data Access Components 2.1
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
Ключевые слова: 
kbnosurvey kbarchive kbhotfixserver kbqfe kbmdac250sp3fix kbbug kbfix kbmdac260sp1fix kbmt KB283106 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:283106

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