MSXML управление памятью - PullRequest
1 голос
/ 29 ноября 2010

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

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

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

Я узнал о сборке мусора по ссылке ниже:

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

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

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

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

1 Ответ

1 голос
/ 01 декабря 2010

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

Чтобы уменьшить потребление памяти GC, вы можете:

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

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

...