【发布时间】:2011-02-18 20:59:13
【问题描述】:
这是一个非常疯狂的错误。对于非常简短的 XML 片段(例如,<ABC def='123'/>),以下是抛出一个 OutOfMemoryException:
public static T DeserializeXmlNode<T>(XmlNode node)
{
try
{
return (T)new XmlSerializer(typeof(T))
.Deserialize(new XmlNodeReader(node));
}
catch (Exception ex)
{
throw; // just for catching a breakpoint.
}
}
我在this MSDN article 中读到,如果我在构造函数中使用带有附加参数的 XmlSerializer,我最终会在每次调用它时生成未缓存的序列化程序程序集,从而导致 Assembly Leak .但我没有在构造函数中使用额外的参数。它也发生在第一次在新启动的 AppDomain 中调用时,所以这也没有意义。
什么给了?
【问题讨论】:
-
最有可能的候选者似乎是您要反序列化的类型 - 您可以发布破坏它的类型的代码吗?
-
我使用 XSD 架构文档中的 xsd.exe 生成了类。
-
XML 可能有问题。也许某种递归正在进行?产生异常的类型有什么特别之处?我的经验是反序列化的内存不足与内存碎片有关。你有简介吗?一个简单的测试项目会产生同样的异常吗?
-
你的类有一个属性调用自己吗?这会导致递归,我之前遇到过这个问题。 (但是,内存不足的例外情况除外。)
-
@Mike Atlas 在 XSD 和 XML 中寻找任何奇怪的东西。如果没有更多信息,我认为我们无法做更多事情。如果可能,也发布堆栈。
标签: .net serialization out-of-memory xmlserializer