2010-11-29 3 views
1

Я использую парсер COM и XML, предоставленный Microsoft для анализа 20 файлов XML. Приложение также использует API, предоставляемый библиотеками для анализа XML-документа.Управление памятью MSXML

Анализатор MSXML3.0, похоже, потребляет огромное количество памяти для кеша (сборка мусора). Даже концепция мусора заключается в том, чтобы ссылаться на один и тот же XML-документ в кеше, если есть какая-либо будущая ссылка, но здесь он снова загружает один и тот же XML-документ несколько раз, что заставляет увеличивать использование памяти в моем приложении.

Я также пытался отлаживать инструмент DevPartner, и это, похоже, не помогает мне в этом. Поскольку это не показывает утечки памяти для этого, но использование памяти в диспетчере задач продолжает расти.

я узнал о сборе мусора, используя ссылку:

http://support.microsoft.com/kb/304227

Он говорит, чтобы отключить сбор мусора, изменив запись redit «NoFullGC» и я вслед за этим, чтобы ФНД этот ключ, но я не смог его найти. Я даже не могу найти MSXML3.0 в regedit.

Другое, что я нахожу странным в этом, заключается в том, что память, выделенная этим процессом, освободилась, как только я скрою окно приложения. (это очень странно для меня).

Пожалуйста, помогите мне в этом.

+0

Другая вещь, которую я нахожу странной в этом, заключается в том, что память, выделенная этим процессом, освободилась, как только я скрою окно приложения. (это очень странно для меня). – Santhosh77 2010-11-29 09:22:50

ответ

1

GC не означает утечку памяти. Таким образом, инструменты диагностики памяти здесь не могут не помочь - или это должен быть ложный сигнал.

В целях снижения потребления памяти GC, вы можете:

  • Переключить на XmlLite, если это возможно. Он доступен во всех поддерживаемых Windows.
  • Попробуйте принудительно выполнить GC с DllCanUnloadNow, как указано в статье KB.

Я не уверен, что окно минимизации может запускать GC, но это должно было начаться с GC, чтобы впоследствии память перерабатывалась.