【发布时间】:2011-02-03 14:42:46
【问题描述】:
简而言之,我有一个将平面数据文件转换为 XML 文件的应用程序。它通过填充对象然后将它们序列化为 XML 来做到这一点。
我遇到的问题是垃圾收集器似乎没有处理序列化的字符串。 3500 个记录文件在完成之前运行到 OutOfMemoryExceptions。确实有些可疑。
当我从组合中取出序列化并简单地传递一个空字符串时,内存消耗仍然如预期的那样,所以我已经排除了我的中间对象(平面文件和 xml 之间)是这里的问题的可能性。它们似乎按预期收集。
有人可以帮忙吗?如何确保正确处理这些字符串?
更新:一些示例代码
// myObj.Serialize invokes an XmlSerializer instance to handle its work
string serialized = myObj.Serialize();
myXmlWriter.WriteRaw(serialized);
这基本上就是出现问题的地方——如果我不使用字符串serialized,内存问题也会消失,即使我仍在将平面文件转换为对象,一次一个.
更新 2:序列化方法
public virtual string Serialize()
{
System.IO.StreamReader streamReader = null;
System.IO.MemoryStream memoryStream = null;
using (memoryStream = new MemoryStream())
{
memoryStream = new System.IO.MemoryStream();
Serializer.Serialize(memoryStream, this);
memoryStream.Seek(0, System.IO.SeekOrigin.Begin);
using (streamReader = new System.IO.StreamReader(memoryStream))
{
return streamReader.ReadToEnd();
}
}
}
【问题讨论】:
-
一些sn-ps代码会有帮助...
-
尝试使用 StringBuilder 并重用它,还有这么多记录可能将它们保存在文件系统/数据库中也可以
-
我同意,但我在一家大公司工作,不能发布专有代码。
-
K Ivanov——我会试试 StringBuilder。至于记录的数量,我已经在序列化后将每条记录写入fs了。
-
你在分配大的东西吗?我认为 LOH 碎片可能是一个问题 - stackoverflow.com/questions/686950/…
标签: c# string memory-management garbage-collection