интересное исключение OutOfMemory с StringBuilder

Мне нужно постоянно строить большие строки в цикле и сохранять их в базе данных, которая в настоящее время иногда даетOutOfMemoryException.

Что в основном происходит здесь, я создаю строку, используяXmlWriter с участиемStringBuilder на основании некоторых данных. Затем я вызываю метод из внешней библиотеки, который преобразует эту строку XML в другую строку. После этого преобразованная строка сохраняется в базе данных. Все это повторяется в цикле около 100 раз для разных данных.

Строки сами по себе не слишком велики (менее 500 Кбайт каждая), и память процесса не увеличивается во время этого цикла. Но все же, иногда я получаюOutOfMemeoryExcpetion вStringBuilder.Append, Интересно, что это исключение не приводит к падению. Я могу поймать это исключение и продолжить цикл.

Что здесь происходит? Зачем мне получатьOutOfMemoryException хотя в системе все еще достаточно свободной памяти? Это какая-то проблема с кучей GC?

Учитывая, что я не могу обойти преобразование всех этих строк, что я мог сделать, чтобы сделать это надежно? Должен ли я форсировать сбор GC? Следует положитьThread.Sleep в петлю? Должен ли я прекратить использованиеStringBuilder? Следует просто повторить попытку при столкновении сOutOfMemoryException?

Ответы на вопрос(3)

Ваш ответ на вопрос