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