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 (сжатие большой кучи не помогло).

Ответы на вопрос(1)

Ваш ответ на вопрос