gpt4 book ai didi

asp.net - XMLSerializer.Serialize 上的 .NET OutOfMemoryException

转载 作者:行者123 更新时间:2023-12-04 06:28:22 26 4
gpt4 key购买 nike

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

XmlSerializer xs = new XmlSerializer(t, xoverrides);

看到这种情况只发生在 Web 服务器上时,我没有大量关于为什么会发生这种情况的信息。我知道它正在序列化的对象并不太严重——每个绝对小于 1 MB。

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

谢谢!

最佳答案

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

有几种解决方案:

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

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

    关于asp.net - XMLSerializer.Serialize 上的 .NET OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2805738/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com