Десериализация из MemoryStream вызывает исключение OutOfMemory в C # - PullRequest
2 голосов
/ 16 июля 2009

Это проблема Winform в C # 3.0.

Я хочу клонировать большой (на самом деле, не очень большой) сложный объект. Чтобы сделать это лениво, я разделяю его на MemoryStream и использую метод BinaryFormatter.UnsafeDeserialize (MemoryStream, null) для получения клонированного объекта. Внутри метода UnsafeDeserialize () всегда генерируется исключение OutOfMemory. Памяти должно быть достаточно.

Я читал об этом как ошибку .net, но не уверен, что это так.

У кого-нибудь есть идеи, почему это происходит? Любое рабочее место? Спасибо.

Ответы [ 4 ]

2 голосов
/ 16 июля 2009

Возможно, глупый вопрос, но вы помните, чтобы перематывать MemoryStream к началу потока перед его десериализацией?

Может также помочь поделиться некоторыми вашими кодами.

1 голос
/ 16 июля 2009

Что такое объект и насколько он велик?

Я видел других людей с похожими проблемами, и в некоторых случаях переход на другой сериализатор исправлял это. Я могу предложить несколько подходящих вариантов в зависимости от сценария; в частности - это данные дерево или график ? (т.е. относятся ли дочерние объекты когда-либо к родным братьям или их родителям? Или только к своим собственным детям).

1 голос
/ 16 июля 2009

Почему вы используете UnsafeDeserialize вместо Deserialize?

0 голосов
/ 16 июля 2009

Я предлагаю вместо этого попробовать FileStream и посмотреть, насколько велик файл.

...