我正在尝试使用以下代码序列化/反序列化大约50MB xml数据的流,并且我得到System.OutOfMemoryException异常。
var formatter = new BinaryFormatter();
var stream = new MemoryStream();
using (stream)
{
formatter.Serialize(stream, source);
stream.Seek(0, SeekOrigin.Begin);
return (T) formatter.Deserialize(stream);
}
我调试了代码,它在formatter.Serialize(stream,source)行上抛出了OutOfMemoryException异常。
我做了一些搜索,说限制是2GB。我如何调试以找出原因或是否有任何有效的编写此代码的方法?或任何观察内存使用的工具。
谢谢,
答案 0 :(得分:1)
处理2GB的xml 永远不会变得高效。但是,要使其工作,您可以尝试写入FileStream
而不是MemoryStream
,因为MemoryStream
有2GB的限制。或者,您可以使用多个缓冲区而不是单个大缓冲区编写自己的Stream
实现。
但是,强烈建议你实际想要做的事情是以下几种组合: