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