我正在使用BinarySerializer处理一个非常大(虽然不是很深)的项目图。我有8GB内存和12GB交换空间,当进行序列化时出现OutOfMemoryException异常,这是可以预料的(可能会接近或超过2GB)。
然而,即使使用gcAllowVeryLargeObjects也没有改善,我仍然遇到同样的异常,并且我确信正在处理应该在内存中容纳下的内容(至少通过交换空间)。
是否有什么方法来支持序列化此项目图/以分块方式获取相同的功能集并获得结果?
我的序列化代码没有任何特殊之处:
public static byte[] Serialize(this object o)
{
var ms = new MemoryStream();
var bf = new BinaryFormatter();
bf.Serialize(ms, o);
ms.Position = 0;
return ms.ToArray();
}
我正在序列化的对象包含着嵌套数组,这些数组本身还包含着其他数组等等,但整个序列化图并没有那么大(它是对源数据进行索引后只有约1GB大小的结果)。
这也不是因为垃圾回收碎片问题(压缩大堆并不能解决问题)。
using
关键字来包含MemoryStream
,这可能会导致内存问题(虽然并非核心问题)。 - LB2