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

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

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

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

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

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

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

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