Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net XMLSerializer.Serialize上的.NET OutOfMemoryException_Asp.net_Out Of Memory_Xmlserializer - Fatal编程技术网

Asp.net XMLSerializer.Serialize上的.NET OutOfMemoryException

Asp.net XMLSerializer.Serialize上的.NET OutOfMemoryException,asp.net,out-of-memory,xmlserializer,Asp.net,Out Of Memory,Xmlserializer,我有一个网站,每当它到达我代码中的以下位置时,就会抛出OutOfMemoryExceptions: XmlSerializer xs = new XmlSerializer(t, xoverrides); 看到这种情况只有在web服务器上才会发生,我没有太多关于为什么会发生这种情况的信息。我知道它正在序列化的对象没有什么太严重的问题——每个对象肯定都少于1 MB 你以前吃过这个吗?想帮我诊断这个问题吗?感谢您的帮助 谢谢 如果我回想一下前一段时间类似的问题,XmlSerializer需要的内存

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

XmlSerializer xs = new XmlSerializer(t, xoverrides);
看到这种情况只有在web服务器上才会发生,我没有太多关于为什么会发生这种情况的信息。我知道它正在序列化的对象没有什么太严重的问题——每个对象肯定都少于1 MB

你以前吃过这个吗?想帮我诊断这个问题吗?感谢您的帮助


谢谢

如果我回想一下前一段时间类似的问题,XmlSerializer需要的内存比处理数据的内存要多。但我不确定为什么会出现这种情况。

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

有两种解决方案:

  • 缓存您创建的XmlSerializer
  • 使用实现缓存的XmlSerializer构造函数重载之一。看起来您使用的XmlSerializer(类型XmlAttributeOverrides)没有实现缓存。XmlSerializer(类型)和XmlSerializer(类型,字符串)实现缓存

  • 您好,我在使用“新的XmlSerializer(o.GetType());”时遇到了类似的问题。我在我的本地机器上面临这个问题,因为有非常大的数据被序列化,它在托管在云服务器上的live app上没有任何例外。但我无法在开发过程中进一步使用和测试序列化字符串。我愿意听取建议。