HttpClient.getAsync() 内存不足异常

3

我有一个函数从 Web 服务中获取大量 JSON 数据。有时,这些数据可能非常大,达到了几个GB。我的调用如下所示:

        try
        {
            using (var httpClient = NewHttpClient())
            {
                var response = httpClient.GetAsync(endpoint).Result;
                return response;
            }
        }
        catch(Exception ex)
        {
            //Do Stuff
        }

当数据量较大时,会抛出内存溢出异常。我认为这是因为响应消息实际上比 HttpResponseMessage 允许的大小要大。有没有一种方法可以一次获取消息的一部分?我相信这已经做过了,但我无法在谷歌和/或 Slashdot 上找到任何相关信息。提前感谢您的建议。


我认为这不是因为它比HttpResponseMessage更大,而是因为您的计算机无法分配足够的RAM来存储所有那些数据。 - undefined
异常抛出在哪里?我本以为这应该能正常工作,但读取数据可能是问题所在。 - undefined
1个回答

7

只需获取流并将其写入文件,以便稍后进行处理。

using (var httpClient = new HttpClient())
{
    var stream = await httpClient.GetStreamAsync(url);
    stream.CopyToAsync(fileStream)
}

6
最好使用GetAsync()方法的重载版本,该版本接受一个HttpCompletionOption参数:var response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead) - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接