我需要在循环中持续构建大字符串并将其保存到数据库,但当前偶尔会出现OutOfMemoryException
。
基本上是这样的:我使用XmlWriter
和StringBuilder
根据某些数据创建了一个字符串。然后我调用外部库中的方法将该xml字符串转换为其他字符串。之后,转换后的字符串被保存到数据库中。对于不同的数据,这整个过程都要在循环中重复约100次。
这些字符串本身并不是太大(每个都不到500k字节),而且在此循环期间进程内存也没有增加。但是,偶尔我会在StringBuilder.Append
中遇到OutOfMemeoryExcpetion
异常。有趣的是,这种异常不会导致崩溃。我可以捕获这个异常并继续执行循环。
发生了什么?为什么我会收到OutOfMemoryException
,尽管系统中仍有足够的可用内存?这是一些GC堆问题吗?
考虑到我不能避免转换所有这些字符串,我应该怎么做才能使它可靠地工作?我应该强制进行GC回收吗?我应该在循环中放一个Thread.Sleep
吗?我应该停止使用StringBuilder
吗?当遇到OutOfMemoryException
时,应该简单地重试吗?