2009-07-16 92 views
2

这是一个C#3.0 Winform问题。从MemoryStream中反序列化抛出C中的OutOfMemory异常#

我想克隆一个大的(实际上不是很大),复杂的对象。为了做到这一点,我把它分散到一个MemoryStream并使用BinaryFormatter.UnsafeDeserialize(MemoryStream,null)方法来获取克隆的对象。在UnsafeDeserialize()方法内部,总是会抛出OutOfMemory异常。记忆应该足够了。

我读了一些关于.net的bug,但不确定它是否属于这种情况。

任何人都知道为什么会发生这种情况?任何workround?谢谢。

+4

你能发表一些实际的代码吗? – 2009-07-16 08:04:43

+0

(回复评论) – 2009-07-16 10:44:34

回答

2

也许一个愚蠢的问题,但你是否记得在反序列化之前将MemoryStream倒回到流的开头?

它也可能有助于分享您的一些代码。

+0

是的,我在反序列化之前将位置设置为0。 – Steve 2009-07-16 08:56:52

1

为什么使用UnsafeDeserialize而不是Deserialize

+0

来自MSDN:“在完全信任的情况下,UnsafeDeserialize提供比反序列化更好的性能。” – 2009-07-16 08:23:14

+0

不知道! :)现在要为我的东西做到这一点! (虽然我觉得它已经比较快了)。 – leppie 2009-07-16 11:20:30

1

对象是什么,它有多大?

我见过其他人有类似的问题,并在某些情况下切换到不同的序列化程序修复它。根据情况,我可以提出几个可能很合适的建议;特别是 - 数据a ? (即,儿童物体是否指兄弟姐妹或其父母?或只是他们自己的孩子)。

0

我建议你试试FileStream来代替,看看文件有多大。