.NET compact framework и управление памятью: исключение OOM - PullRequest
2 голосов
/ 27 августа 2010

Мое приложение .NET CF 3.5 получает исключение «Недостаточно памяти» при обработке DOM XML-файла размером 2 МБ.Теперь я понимаю, что это следует изменить на обработку SAX, но мне было интересно, почему эта ошибка получена.

С http://blogs.msdn.com/b/mikezintel/archive/2004/12/08/278153.aspx, "Windows CE создает одно дополнительное виртуальное адресное пространство размером 1G длябольшие ассигнования. "«Виртуальное адресное пространство 32-мегабайтного приложения может подвергаться большому давлению со стороны большого приложения, и если оно становится достаточно фрагментированным, может привести к ошибкам OOM, даже если имеется свободная физическая память».если размер кучи моего приложения, включая DOM, занимает больше памяти, чем 32 МБ, приложение завершится сбоем, но не сможет ли оно использовать больше виртуального адресного пространства в 1 ГБ для этого выделения?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2010

Мы обнаружили, что это очень полезное объяснение (и решение!) Проблем памяти CF.Мы успешно используем эту методологию в приложениях, в которых раньше возникали проблемы с использованием служебных программ Intermec (у нас были проблемы с P / Invoke - пространство виртуальной машины для нашего приложения было полностью использовано, поэтому библиотеки P / Invoke не могли быть загружены.)

http://robtiffany.com/mobile-development/memmaker-for-the-net-compact-framework

0 голосов
/ 27 августа 2010

Из того, что я помню, все обычные данные (и связанные с ними объекты) живут в виртуальном адресном пространстве 32 Мб для приложения - чтобы использовать дополнительное адресное пространство 1 Гб, вы должны изучить отображение памяти.Конечно, альтернативой в вашем случае будет потоковая обработка.

...