2015-03-11 4 views
0

MSXML выходит из строя из-за нехватки памяти, когда мы пытаемся преобразовать XML около 160 МБ.MSXML Out Memory -Delphi

Что интересно, так это то, что он терпит неудачу только для определенного сервера, я могу успешно преобразовать один и тот же файл без каких-либо проблем на моем компьютере.

Вот вещи, которые я пытался:

  • Увеличения виртуальной памяти не -had никакого эффекта
  • Уже пробовал выгрузку библиотеки DLL, которые помогли на некоторое время, но как только размер файла получить огромную повторились только что server

Я пытался сделать свое приложение большим адресом, установив флаг PE, но чувствую, что это может не сработать с delphi 5.

Примечание: Я знаю, что MSXML использует модель DOM и втягивает все в память, но мы не можем перейти от этой модели и исправить это.

Любые предложения будут оценены. DELPHI 5 MSMXML 6

+0

Вы пробовали дефрагментировать диск на этой машине? –

+0

, если это кажется странным предложением - возможно, http://blogs.msdn.com/b/ericlippert/archive/2009/06/08/out-of-memory-does-not-refer-to-physical-memory.aspx объяснил бы мое мышление –

+0

При анализе моего диска он имеет 14% -ную фрагментацию, это то, что я должен попробовать дефрагментировать? – user3313541

ответ

1

Большой адрес, который, вероятно, является вашей единственной надеждой. Вы не сможете сделать это со встроенным менеджером памяти Borland. Поэтому использование FastMM или даже замена, основанная на платформе HeapAlloc, поможет вам преодолеть это препятствие. Могут возникнуть другие проблемы с большим адресом и RTL/VCL, но я был бы уверен. Я сделал все это успешно с Delphi 6, поэтому Delphi 5 не может быть и речи.

По сути, вам нужно переключиться на парсер SAX. Парсы, основанные на DOM, не смешиваются с 32-разрядным адресным пространством и огромными XML-файлами.

+0

Как вы думаете, может быть, причина в том, что это происходит только на определенных серверах? – user3313541

+1

Виртуальное адресное пространство бывает другим. Возможно, неудачный сервер загружает DLL с неудобным базовым адресом. –

+0

Не был ли старый менеджер памяти Borland подвержен фрагментации памяти? – SilverWarior