У меня проблемы с сериализацией большого количества объектов в .NET. Граф объектов довольно большой с некоторыми новыми наборами данных, поэтому я получаю:
System.Runtime.Serialization.SerializationException
"The internal array cannot expand to greater than Int32.MaxValue elements."
Кто-нибудь еще достиг этого предела? Как ты это решил?
Было бы хорошо, если бы я все еще мог использовать встроенный механизм сериализации, если это возможно, но, похоже, мне просто нужно свернуть свой собственный (и поддерживать обратную совместимость с существующими файлами данных)
Все объекты POCO и сериализуются с использованием BinaryFormatter
. Каждый сериализуемый объект реализует ISerializable
для выборочной сериализации своих членов (некоторые из них пересчитываются во время загрузки).
Похоже, это открытая проблема для MS ( подробности здесь ), но она была решена как Wont Fix. Подробности (по ссылке):
Сбой двоичной сериализации для объекта
графики с более чем ~ 13,2 миллиона
объекты. Попытка сделать это вызывает
исключение в
ObjectIDGenerator.Rehash с
вводящая в заблуждение ссылка на сообщение об ошибке
Int32.MaxValue.
При осмотре
ObjectIDGenerator.cs в SSCLI
Исходный код, кажется, что больше
графы объектов могут быть обработаны
добавление дополнительных записей в
Размеры массива. Смотрите следующие строки:
// Table of prime numbers to use as hash table sizes. Each entry is the
// smallest prime number larger than twice the previous entry.
private static readonly int[] sizes = {5, 11, 29, 47, 97, 197, 397,
797, 1597, 3203, 6421, 12853, 25717, 51437, 102877, 205759,
411527, 823117, 1646237, 3292489, 6584983};
Однако было бы неплохо, если бы
сериализация работала для любого
разумный размер графа объекта.