Исправление: утечка виртуальной памяти большого числа одновременно открыть наборов записей

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

В этой статье

Проблема

Приложение или служба с большим количеством (более 500) одновременно открытых наборах записей объектов данных ActiveX (ADO), могут открывать и закрывать часто может возникнуть утечка виртуальной памяти, приводит к фрагментации памяти и ошибок объема памяти.

Данная проблема может возникнуть в любой версии из Microsoft Data Access компонентов (MDAC) между 2,5 RTM (2.50.4403.12) и версии 2.6 с пакетом обновления 1 (2.61.7326.6). Эта проблема не возникает в MDAC 2.7.

Эта проблема не зависит от поставщика; это может произойти с собственным поставщиком SQL Server (SQLOLEDB.dll), собственный поставщик Oracle (Msdaora.dll), поставщика ODBC (Msdasql.dll), ядро курсора клиента и любой компонент, который использует код общей памяти.

Причина

При выпуске наборы записей, процедуры управления памяти MDAC сохранить память, выделенную для них в списке "представление сторону", а не фактически освобождения памяти. Это делается во избежание издержки, создаваемые полностью освободить и перераспределения памяти.

По умолчанию, код управления общей памяти, используемый в MDAC 2.5 (Msdatl2.dll) и MDAC 2.6 (Msdatl3.dll) будут сохранены до 500 из этих способов; ничего больше этой суммы освобождается вызовыVirtualFreefunction:.

Ошибка кода в код управления памяти становится неверный вызовVirtualFree, что память освобождается фактически. Код возвратаVirtualFreeне установлен, и приложение не получает сведения о том, что была утечка памяти.

Решение

Чтобы устранить эту проблему, получите последний пакет обновления для MDAC 2.5 корпорации Майкрософт. Дополнительные сведения см. в следующей статье базы знаний Майкрософт::
293312ИНФОРМАЦИЯ: Как получить последние версии MDAC 2.5 с пакетом обновления
Английская версия данного исправления содержит версии файлов, приведенные в следующей таблице или более поздние.:

MDAC 2.5 С ПАКЕТОМ ОБНОВЛЕНИЯ 2
   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
				
Для компонентов MDAC 2.5 только:Для решения проблемы загрузите последний пакет обновления для Windows 2000.. Дополнительные сведения см. в следующей статье базы знаний Майкрософт::
260910Как получить последний пакет обновления для Windows 2000
MDAC 2.6 С ПАКЕТОМ ОБНОВЛЕНИЯ 1
   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	
				

Временное решение

Чтобы обойти эту проблему, можно разработать приложение или службу, открыты одновременно не более 500 записей.

Чтобы облегчить проблемы, изменяя следующие параметры в реестре:
    HKLM\Software\Microsoft\MDAC         MaxReservedBlocks
    HKLM\Software\Microsoft\MDAC         ReservedMemorySize
				
Примечание по умолчанию эти записи реестра не существует, необходимо затем добавить вручную. Обе операции являются DWORD-значения.

Значение по умолчаниюMaxReservedBlocksравно 500. При увеличении этого значения нескольких блоков будут сохранены в списке Вид сторону диспетчер памяти (и поэтому будет несут дополнительную память в приложении), но повторное использование блоков. Если уменьшить это значение увеличивается скорость, с которой утечка памяти.

Значение по умолчаниюReservedMemorySizeсоставляет 1 МБ. Можно уменьшить это значение, чтобы ограничить объем выделений виртуальной памяти; тем не менее, это может снизить производительность, если требуется больше памяти, чем в блоки памяти.

Статус

Данное поведение является подтвержденной ошибкой продуктов Майкрософт, перечисленных в начале данной статьи..

MDAC 2.5

Во-первых, этой проблемы появилось в MDAC 2.5 с пакетом обновления 3.Первое исправление этой проблемы появилось в пакете обновления 3 (SP3) для Windows 2000..

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

В MDAC 2.5 выделения утечки памяти будет состоять из памяти зарезервировано и не будет иметь зафиксированных страниц, например:
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 the leaked memory allocations will contain at least 10 KB (65536 bytes) of committed pages; for example:
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 either case, monitoring the application or service with Performance Monitor shows an excessive use of virtual bytes.

Свойства

Код статьи: 312575 - Последний отзыв: 21 февраля 2014 г. - Revision: 2.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.6
  • Microsoft Data Access Components 2.6 Service Pack 1
Ключевые слова: 
kbnosurvey kbarchive kbqfe kbhotfixserver kbmdac250sp3fix kbbug kbfix kbmdac260fix kbwin2000sp3fix kbmt KB312575 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:312575

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