HttpClient中的OutOfMemory异常

时间:2019-02-21 20:30:08

标签: c# httpclient

在未处理OutOfMemoryException的情况下被击中。

using(var httpclient = new HttpClient(httpClientHandler))
{
    httpclient.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
    httpclient.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("deflate"));

    var request = new HttpRequestMessage(HttpMethod.Post, url);
    request.Content = new FormUrlEncodedContent(parameters);

    var response = await httpclient.SendAsync(request);
    var contents = await response.Content.ReadAsStringAsync();

    var source = contents.ToString();
    return source;
}

我不太确定该怎么做,或具体原因是什么,我认为这与“ await response.Content.ReadAsStringAsync();

有人建议使用

  ReadAsStreamAsync();

而是输出到文件,但是我需要将其作为字符串输出到“ source”,以便我可以在另一个函数中分析数据。

我还想补充一点,我正在运行线程。

是否可能

Response.Content

是否已在完成特定功能后存储在内存中?将其退还给源之后,是否需要处置/清除内存或内容?

1 个答案:

答案 0 :(得分:0)

建议的解决方案是正确的。您的应用程序所在的操作系统内存似乎没有足够的内存。为了解决此问题,明智的做法是将流作为文件而不是内存写入文件到磁盘。 TransferEncodingChunked可能也有帮助,但发件人需要支持。

using (FileStream fs = File.Create("fileName.ext")
{
    ....
    var stream = await response.Content.ReadAsStreamAsync();
    await fs.CopyToAsync(stream);
    fs.Close();
}