httpclient中的OutofMemory异常



被击中未经手的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;
}

我不太确定该怎么做,或者是什么原因,我相信它与"等待响应"有关。

有人建议使用

  ReadAsStreamAsync();

而不是输出到文件,但是我需要作为字符串输出到"源",以便我可以在另一个函数中分析数据。

我也想添加我正在运行线程。

可能是

Response.Content

即使完成了该特定功能,也将存储在内存中?将其返回源后,我需要处置/清除内存或内容吗?

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

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

最新更新