C#对字符串的大JSON导致内存不足异常

时间:2014-12-23 08:05:05

标签: c# json string out-of-memory

我正在尝试下载非常大的JSON文件。但是,我不断收到错误消息:

“mscorlib.dll中出现未处理的'System.OutOfMemoryException'类型异常”

{由于内存不足异常,功能评估被禁用。}

有关如何下载此大型JSON文件的任何提示?我曾尝试使用string和StringBuilder,但没有运气。

这是我的代码:

public static string DownloadJSON(string url)
{
 try
 {
   String json = new WebClient().DownloadString(url); // This part fails!
   return json;
 }
 catch (Exception)
 {
  throw;
 }
}

我已创建控制台应用程序。我用较小的JSON文件尝试了这个代码并且它有效。 我的想法是稍后拆分这个更大的JSON文件并将其放到数据库中。但是我需要在将它放入数据库之前对其进行编码。我还没有编写数据库部分或其他任何东西,因为下载这个大JSON会导致问题。我不需要它作为流,但这是我编写代码的示例方式。我需要对其进行编码,因为数据具有特殊字符,如å。

我也试过这个问题但同样的问题:

var http = (HttpWebRequest)WebRequest.Create(url);
            var response = http.GetResponse();

            var stream = response.GetResponseStream();
            var sr = new StreamReader(stream);
            var content = sr.ReadToEnd();

2 个答案:

答案 0 :(得分:1)

我认为你的反应非常大。处理流更好。现在指出导致记忆超自然现象。

  • 在.net最大尺寸的任何对象2GB。这甚至适用于64位机器。如果您的机器是32位,则此限制非常低。

在你的情况下,上面的规则会中断,所以它不会起作用,但如果你的文件大小小于那个,那么尝试用64位构建你的代码,它会给你的结果。

答案 1 :(得分:0)

将其下载到文件中:

using (WebClient webClient = new WebClient())
{
    webClient.DownloadFile(
        url,
        path);
}

当然,如果JSON库太大而无法在内存中打开,它可能无法处理,但如果您没有选择并且文件必须如此大,您可以尝试以某种方式处理它。