SandCastle и OutOfMemoryException

SandCastle не может обработать нашу библиотеку классов, потому что она аварийно завершает работу с исключением OutOfMemoryException во время преобразования XSL.

Что мы можем сделать с этим, кроме очевидного, купить больше памяти? Проблема в том, что это наши машины для разработчиков с 3,3 ГБ памяти в 32-битной ОС, поэтому в основном мы должны либо обновить до 64-битной и более памяти (что не произойдет какое-то время), либо настроить виртуальный сервер на сделать это с большим количеством памяти (что повлияет на производственные серверы).

Я серьезно сомневаюсь, что у нас самая большая в мире библиотека классов, для которой нужны файлы справки, так что у нас есть варианты? Есть ли волшебная настройка "Не вылетать из-за ошибок памяти", которую мы забыли отключить?

1 ответ

Решение

Если вы работаете в 32-битной Windows, ваш пользовательский процесс сможет адресовать только 2 ГБ памяти по умолчанию (3 ГБ запускается с учетом большого адреса). 2 ГБ используются для всего процесса, поэтому среда выполнения.NET, стандартные библиотеки, резервирование и т. Д. Все берут на себя. По моему опыту, для приложений.NET на 32-битной версии остается около 1,5 ГБ.

Вы можете получить доступ к большему объему памяти с помощью переключателя, учитывающего большие адреса, но он не предоставляется бесплатно, если вы работаете в 32-битной Windows. Переход на 64-битную Windows позволит вашему 32-битному приложению получить доступ ко всему 32-битному адресному пространству и, таким образом, даст вам 4 ГБ адресуемого пространства.

Недавно я написал запись в блоге с подробностями об использовании памяти для приложений.NET, но, поскольку я веду блог на датском языке, возможно, вы не сможете его прочитать. Однако, если вы хотите посмотреть, ссылка: http://kodehoved.dk/?p=156

Вы также можете найти это сообщение в блоге MSDN соответствующим: http://blogs.msdn.com/maoni/archive/2007/05/15/64-bit-vs-32-bit.aspx

Другие вопросы по тегам