C#使用内存流System.OutOfMemoryException进行序列化/反序列化

时间:2015-03-19 16:41:37

标签: c# serialization

我正在尝试使用以下代码序列化/反序列化大约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。我如何调试以找出原因或是否有任何有效的编写此代码的方法?或任何观察内存使用的工具。

谢谢,

1 个答案:

答案 0 :(得分:1)

处理2GB的xml 永远不会变得高效。但是,要使其工作,您可以尝试写入FileStream而不是MemoryStream,因为MemoryStream有2GB的限制。或者,您可以使用多个缓冲区而不是单个大缓冲区编写自己的Stream实现。

但是,强烈建议你实际想要做的事情是以下几种组合:

  • 使用不同的序列化格式(xml是大数据的不良选择)
  • 在一个blob中不要求所有这些
  • 拥有较少的数据