我需要在循环中不断构建大字符串并将它们保存到目前偶尔会产生OutOfMemoryException
.
这里基本上发生的是我根据一些数据使用XmlWriter
with创建一个字符串。StringBuilder
然后我从外部库中调用一个方法,将这个 xml 字符串转换为其他字符串。之后,转换后的字符串将保存到数据库中。对于不同的数据,这整个事情在循环中重复完成大约 100 次。
字符串本身并不太大(每个小于 500kByte),并且在此循环期间进程内存没有增加。但是,偶尔我会得到一个OutOfMemeoryExcpetion
inside StringBuilder.Append
。有趣的是,这个异常不会导致崩溃。我可以捕获该异常并继续循环。
这里发生了什么?OutOfMemoryException
尽管系统中仍有足够的可用内存,为什么我会得到一个?这是一些 GC 堆问题吗?
鉴于我无法规避转换所有这些字符串,我该怎么做才能使这项工作可靠?我应该强制进行 GC 收集吗?应该把 aThread.Sleep
放入循环吗?我应该停止使用StringBuilder
吗?遇到OutOfMemoryException
?