我正在使用带有相当大(虽然不是很深)的项目图的 BinarySerializer。我有 8GB 的 ram 由 12Gig 的交换支持,并且在序列化时我得到了一个 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 左右)。
这也不是由于 GC 碎片(压缩大堆没有帮助)。