![](/img/trans.png)
[英]HttpClient throws OutOfMemory exception when TransferEncodingChunked is not set
[英]OutOfMemory exception in 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;
}
我不太確定該怎么做,或具體原因是什么,我認為這與“等待響應”有關。Content.ReadAsStringAsync();
建議有人使用
ReadAsStreamAsync();
而是輸出到文件,但是我需要以字符串形式輸出到“ source”,以便可以在另一個函數中分析數據。
我還想補充一點,我正在運行線程。
有可能
Response.Content
完成特定功能后仍存儲在內存中嗎? 將其退還給源之后,是否需要處置/清除內存或內容?
建議的解決方案是正確的。 您的應用程序所在的操作系統內存似乎沒有足夠的內存。 為了解決此問題,明智的做法是將流作為文件而不是內存寫入文件到磁盤。 TransferEncodingChunked
也可能有幫助,但發件人需要支持它。
using (FileStream fs = File.Create("fileName.ext")
{
....
var stream = await response.Content.ReadAsStreamAsync();
await fs.CopyToAsync(stream);
fs.Close();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.