OutOfMemoryException с gcAllowVeryLargeObjects
Я использую BinarySerializer с довольно большим (хотя и не очень глубоким) графиком элементов. У меня есть 8 ГБ оперативной памяти, подкрепленные 12 ГБ подкачки, и я получаю исключение OutOfMemoryException при сериализации, которая ожидается (возможно, график может приближаться или превышать 2 ГБ).
Однако когда я использую gcAllowVeryLargeObjects, это не лучше, я все равно получаю то же исключение, и я определенно работаю над чем-то, что должно храниться в памяти (по крайней мере, с помощью swap).
Могу ли я что-нибудь сделать, чтобы поддержать сериализацию этого / способа получить тот же набор функций, но, возможно, получить результат в чанках?
В моем коде сериализации нет ничего особенного:
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();
}
Объект, который я сериализую, содержит массивы элементов, которые сами содержат массив и т. Д., Но сам полный граф не такой «большой» (это результат индексации данных, которые в источнике уже имеют размер всего около 1 ГБ).
Это также не связано с фрагментацией GC (сжатие большой кучи не помогло).