Я разрабатываю настольное приложение, с которым у нас проблемы с памятью. Технологии .Net, C ++ и Fortran. Приложение в настоящее время построено в x86 из-за ограничений сторонних компонентов. Это приложение с интенсивным использованием памяти, которое часто создает большие массивы (до 50 МБ в процессе расчета). В определенных ситуациях я могу заставить приложение сравнительно быстро исчерпать память с помощью диспетчера задач, показывающего только 350 МБ, выделенных для процесса. Приложению не удастся выделить массив размером 50 МБ и выдать ошибку. Эта ошибка размещения может возникнуть в Fortran или .Net. Я пытался диагностировать ошибку с помощью профилировщика памяти ANTS, но это показывает, что фрагментации Large Object Heap нет, что для меня означает, что в .Net нет проблем с фрагментацией памяти.
Возможно ли, что это фрагментация памяти, учитывая, что ANTS утверждает, что в куче больших объектов в момент выделения массива хранится очень мало информации? Если да, какие инструменты доступны для диагностики и решения этой проблемы?
я не знаю, какое влияние это окажет, но, возможно, попробую активировать низкая куча фрагментации
В дополнение к этому вы можете попытаться избежать постоянного выделения и освобождения пространства.
Если вам часто требуются большие блоки временной памяти, вы можете выделить достаточно большой блок за раз и передать его в качестве рабочей памяти для своих подпрограмм.
Вы также можете перегрузить оператор new для некоторых конкретных классов и реализовать собственную более разумную обработку памяти.
Других решений пока нет …