Я исследую странную проблему с моим приложением, где поведение отличается в 2 версиях Windows:
- Windows XP (32-разрядная версия)
- Windows Server 2008 (64-разрядная версия)
Мои выводы следующие.
Windows XP (32-разрядная версия)
При запуске моего тестового сценария синтаксический анализатор XML в определенный момент завершается сбоем во время анализа очень большого файла конфигурации (см. этот вопрос для получения дополнительной информации).
Во время сбоя размер процесса составляет приблизительно 2,3 ГБ. Обратите внимание, что раздел реестра был установлен, чтобы позволить процессу превышать максимальный размер процесса по умолчанию 2 ГБ (в 32-разрядных операционных системах).
Системой сбоя является вызов IXMLDOMDocument::load()
сбоя, как описано в вопросе, связанном выше.
Windows Server 2008 (64-разрядная версия)
Я запускаю точно в том же тестовом сценарии в Windows Server 2008 - единственной переменной является операционная система. Когда я смотрю на мой процесс в диспетчере задач, рядом с ним стоит * 32
, что, как я предполагаю, означает, что он работает в режиме 32-битной совместимости.
Что я заметил, так это то, что в момент сбоя синтаксического анализа XML в Windows XP размер процесса в Windows Server 2008 составляет всего около 1 ГБ (IOW, примерно вдвое меньше, чем в Windows XP).
Синтаксический анализ XML не завершается с ошибкой в Windows Server 2008, все работает как надо.
Мои вопросы:
Почему 32-разрядное приложение (работающее в 32-разрядном режиме) потребляет половину объема памяти в 64-разрядной операционной системе? Это действительно использует половину памяти, это обычная виртуальная память по-другому, или это что-то еще?
Признавая, что мое приложение (кажется) использует половину объема памяти в Windows Server 2008, у кого-нибудь есть какие-либо идеи относительно того, почему синтаксический анализ XML не будет работать в Windows XP? Каждый раз, когда я запускаю тестовый пример, ошибка, доступ к которой осуществляется через IXMLDOMParseError
(см. этот ответ ), отличается. Поскольку это кажется недетерминированным, мне кажется, что я сталкиваюсь с проблемой использования памяти, а не с искаженным XML.