OutOfMemoryException interessante com StringBuilder

Eu tenho a necessidade de construir continuamente grandes strings em um loop e salvá-los no banco de dados que atualmente ocasionalmente produz umOutOfMemoryException.

O que basicamente está acontecendo aqui é criar uma string usandoXmlWriter comStringBuilder com base em alguns dados. Em seguida, chamo um método de uma biblioteca externa que converte essa string xml em alguma outra string. Depois disso, a string convertida é salva no banco de dados. Tudo isso é feito repetidamente em um loop cerca de 100 vezes para dados diferentes.

As seqüências de caracteres por si só não são muito grandes (abaixo de 500 kByte cada) e a memória de processo não está aumentando durante esse loop. Mas ainda assim, ocasionalmente receboOutOfMemeoryExcpetion dentroStringBuilder.Append. Curiosamente, esta exceção não resulta em falha. Eu posso pegar essa exceção e continuar o loop.

O que está acontecendo aqui? Por que eu teria umaOutOfMemoryException allthough ainda há memória livre suficiente disponível no sistema? Isso é algum problema de heap do GC?

Dado que não posso contornar a conversão de todas essas seqüências, o que eu poderia fazer para que isso funcione de forma confiável? Devo forçar uma coleção de GC? Deve colocar umThread.Sleep no loop? Devo parar de usarStringBuilder? Deve simplesmente tentar quando confrontado com umOutOfMemoryException?

questionAnswers(3)

yourAnswerToTheQuestion