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