【问题标题】:.NET OutOfMemoryException on XMLSerializer.SerializeXMLSerializer.Serialize 上的 .NET OutOfMemoryException
【发布时间】:2010-05-10 19:19:50
【问题描述】:

我有一个网站,只要它到达我的代码中的以下位置,就会抛出 OutOfMemoryExceptions:

XmlSerializer xs = new XmlSerializer(t, xoverrides);

看到这仅在网络服务器上发生时,我没有大量信息说明为什么会发生这种情况。我知道它正在序列化的对象并不太严重 - 每个肯定小于一个 MB。

你以前有过吗?想帮我诊断问题吗?任何帮助表示赞赏。

谢谢!

【问题讨论】:

    标签: asp.net out-of-memory xmlserializer


    【解决方案1】:

    OutOfMemoryException 不是由正在序列化的对象引起的,而是由 XmlSerializer 对象的构造引起的。创建 XmlSerializer 时,会动态生成程序集并将其加载到 AppDomain 中。在卸载它们的 AppDomain 之前,不能对这些程序集进行垃圾收集,在您的情况下永远不会。根据所使用的 XmlSerializer 构造函数,构造的每个 XmlSerializer 都将动态生成一个新程序集。随着时间的推移,这些程序集将消耗所有可用内存。

    有几个解决方案:

    1. 缓存您创建的 XmlSerializer。
    2. 使用实现缓存的 XmlSerializer 构造函数重载之一。看来您正在使用未实现缓存的 XmlSerializer(Type, XmlAttributeOverrides) 。 XmlSerializer(Type) 和 XmlSerializer(Type, string) 实现缓存。

    Microsoft KB : Memory usage is high when you create several XmlSerializer objects in ASP.NET

    【讨论】:

    • 嗨,我在使用“new XmlSerializer(o.GetType());”时遇到了类似的问题。我在本地机器上面临这个问题,正在序列化非常大的数据,它在实时应用程序上没有任何例外,它托管在云服务器上。但我无法在开发过程中进一步使用和测试序列化字符串。我愿意接受建议。
    【解决方案2】:

    如果我回想起不久前的类似问题,XmlSerializer 需要大量内存而不是其处理的数据。不过我不知道为什么会这样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多