interesante OutOfMemoryException con StringBuilder

Tengo la necesidad de construir continuamente cadenas grandes en un bucle y guardarlas en la base de datos que en la actualidad produce ocasionalmente unOutOfMemoryException.

Lo que está pasando aquí básicamente es crear una cadena usandoXmlWriter conStringBuilder Basado en algunos datos. Luego llamo a un método desde una biblioteca externa que convierte esta cadena xml en otra cadena. Después de eso, la cadena convertida se guarda en la base de datos. Todo esto se hace repetidamente en un bucle unas 100 veces para datos diferentes.

Las cadenas por sí mismas no son demasiado grandes (por debajo de 500 kytes cada una) y la memoria del proceso no aumenta durante este ciclo. Pero aún así, ocasionalmente me sale unOutOfMemeoryExcpetion dentroStringBuilder.Append. Curiosamente esta excepción no resulta en un accidente. Puedo atrapar esa excepción y continuar el bucle.

¿Que esta pasando aqui? ¿Por qué obtendría unOutOfMemoryException ¿Aunque todavía hay suficiente memoria libre disponible en el sistema? ¿Es este un problema de montón GC?

Dado que no puedo evitar convertir todas estas cadenas, ¿qué podría hacer para que esto funcione de manera confiable? ¿Debo forzar una colección de GC? Debería poner unThread.Sleep en el bucle? ¿Debo dejar de usarStringBuilder? Simplemente debe volver a intentar cuando se enfrentan con unOutOfMemoryException?

Respuestas a la pregunta(3)

Su respuesta a la pregunta