ciekawy OutOfMemoryException z StringBuilder

Mam potrzebę ciągłego budowania dużych łańcuchów w pętli i zapisywania ich w bazie danych, która obecnie czasami dajeOutOfMemoryException.

W zasadzie to tutaj tworzę ciąg używającXmlWriter zStringBuilder na podstawie niektórych danych. Następnie wywołuję metodę z zewnętrznej biblioteki, która konwertuje ten ciąg XML na inny ciąg. Następnie przekonwertowany ciąg jest zapisywany w bazie danych. To wszystko odbywa się wielokrotnie w pętli około 100 razy dla różnych danych.

Łańcuchy same w sobie nie są zbyt duże (poniżej 500 kB), a pamięć procesowa nie zwiększa się podczas tej pętli. Ale wciąż, czasami dostajęOutOfMemeoryExcpetion w ciąguStringBuilder.Append. Co ciekawe, ten wyjątek nie powoduje awarii. Mogę złapać ten wyjątek i kontynuować pętlę.

Co tu się dzieje? Dlaczego miałbym dostaćOutOfMemoryException mimo że w systemie wciąż jest wystarczająco dużo wolnej pamięci? Czy to jakiś problem ze stertą GC?

Biorąc pod uwagę, że nie mogę obejść konwersji wszystkich tych ciągów, co mogę zrobić, aby ta praca była niezawodna? Czy powinienem wymusić kolekcję GC? Powinien umieścićThread.Sleep w pętlę? Powinienem przestać używaćStringBuilder? Powinien po prostu ponowić próbę po skonfrontowaniu się zOutOfMemoryException?

questionAnswers(3)

yourAnswerToTheQuestion