Могу ли я смоделировать нехватку памяти, чтобы выявить утечку памяти, с меньшим исходным набором данных в приложении .NET?

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

Оставив на время в стороне вопрос производительности приложения - он следующий в списке задач после правильного поведения приложения:

Есть ли простой способ ограничить объем памяти, доступной приложению при работе в режиме отладки в Visual Studio, чтобы заставить ошибки OutOfMemory, которые обычно возникают только в очень больших наборах данных, вместо этого возникать в меньшем наборе данных? < / em>


person Skeolan    schedule 04.12.2009    source источник


Ответы (4)


Просто выделите себе большой кусок при запуске программы - прежде чем делать что-либо еще.

Чтобы оставить около 500 МБ свободного места (для 32-битного процесса):

byte[] OutOfMemory = new Byte[int.MaxValue - ((1024 ^ 2) * 500)];
person Community    schedule 04.12.2009
comment
Этот ответ может быть устаревшим - см. [Почему максимальный размер байта [] 2 ГБ - 57 Б?] (stackoverflow.com / a / 6616968/427192) для получения дополнительной информации. - person Dan Pichelman; 02.07.2014

Вы пробовали просто для начала выделить большой объем памяти и сохранить его на время выполнения программы?

Это уменьшит доступную память для остальной части приложения.

person Lasse V. Karlsen    schedule 04.12.2009

Один из приемов, который должен сработать, - это выделить больший буфер сразу при запуске программы. Пока вы сохраняете ссылку на него, чтобы он не был GCed, вы получите то, что хотите.

person R Samuel Klatchko    schedule 04.12.2009
comment
Хороший момент о сохранении ссылки! - person ; 05.12.2009

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

http://www.red-gate.com/products/ants_memory_profiler/index.htm

Это дорого, но проба, вероятно, подойдет для решения этой проблемы.

person Chris Smith    schedule 04.12.2009