Можно ли имитировать дефицит памяти, чтобы определить утечку памяти с помощью меньшего набора исходных данных в приложении .NET? - PullRequest
2 голосов
/ 05 декабря 2009

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

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

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

Ответы [ 4 ]

3 голосов
/ 05 декабря 2009

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

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

byte[] OutOfMemory = new Byte[int.MaxValue - ((1024 ^ 2) * 500)];
2 голосов
/ 05 декабря 2009

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

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

0 голосов
/ 05 декабря 2009

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

http://www.red -gate.com / продукция / ants_memory_profiler / index.htm

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

0 голосов
/ 05 декабря 2009

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

...