【发布时间】:2017-10-09 07:48:58
【问题描述】:
我将本地数据解析为 JSON,然后将 JSON 解析为 XML。解析为 JSON 工作正常,我很确定一两周前解析为 XML 也工作正常 - 它不是在生产中,但我对其进行了测试并且它有效。现在我得到上述异常。这是我的代码:
public static string ParseData(Data data)
{
string xmlString = string.Empty;
XmlData xmlData = new XmlData(data);
using (MemoryStream memoryStream = new MemoryStream())
using (StreamReader reader = new StreamReader(memoryStream))
{
xmlSerializer.WriteObject(memoryStream, xmlData);
memoryStream.Position = 0;
xmlString = reader.ReadToEnd(); //exception occurs here
}
return xmlString;
}
当发生异常时,memoryStream.Position 的值等于它的长度,我仍然有大约 200-300 mb 的 RAM。它是 64 位应用程序和 64 位系统。我检查了类似的问题,但就我而言,没有大量数据(json 最大为 1.5mb)。
已更新。堆栈跟踪:
"在 System.Text.StringBuilder.ToString()\r\n 在 System.IO.StreamReader.ReadToEnd()\r\n 在 Common.Util.LiveScoringXml.ParseData(Data data) 中 C:\Source\Repos\Latest\Common\Util\LiveScoringXml.cs:30 行
【问题讨论】:
-
尝试使用
try-catch块获取更多信息 -
你必须向我们展示堆栈跟踪。
-
如果你的机器上有 sql,它可能会吃掉你所有的内存,即使在你的任务管理器中看起来你已经足够了。在我的情况下,有时系统运行正常,有时它会内存不足。如果你有 sql 你应该限制它的内存使用
-
在
ParseData中添加一个GC.Collect怎么样,看看这是否有什么不同。 -
你对函数的结果做了什么?写入磁盘?