Почему куча больших объектов может расти, а не генерировать исключение? - PullRequest
1 голос
/ 28 мая 2010

В предыдущем вопросе я спросил возможные программные способы максимизации самого большого блока, выделяемого на LOH . Я все еще вижу проблемы, но теперь я пытаюсь понять, почему LOH, кажется, увеличивается и уменьшается в размерах, но я все еще вижу исключения OutOfMemoryException, которые соответствуют тому, что другие сообщали о том, что это происходит из-за фрагментации LOH ,

Почему один вызов, например, StringBuilder.EnsureCapacity может генерировать для меня исключение OutOfMemoryException, но другой вызов откуда-то еще приводит к увеличению размера LOH (согласно счетчикам производительности, он увеличивается и уменьшается)?

Ответы [ 2 ]

2 голосов
/ 28 мая 2010

Я не уверен, но я бы попробовал 2 способа:

  1. проверьте выделенную неуправляемую память в вашем приложении и используйте метод GC.AddMemoryPressure, чтобы сообщить управлению памятью, как лучше справиться с этим.
  2. используйте класс MemoryFailPoint перед вашими большими вызовами распределения. там у вас есть шанс избежать большого бума в вашем приложении. освободите некоторые ресурсы и попробуйте снова.

edit: третий способ может состоять в том, чтобы создавать больше доменов приложений и обрабатывать такие большие вещи в этих дополнительных доменах приложений.

0 голосов
/ 03 июня 2010

Я пошел к оригинальной статье и опубликовал то, что, по-моему, может быть вашей проблемой.Иди проверь это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...