Исключение OutOfMemory в HttpClient - PullRequest
       1

Исключение OutOfMemory в HttpClient

0 голосов
/ 21 февраля 2019

Получение удара с 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;
}

Я не совсем уверен, что делать, или какова конкретная причина, я полагаю, что это как-то связано с "жду ответа. Содержание.ReadAsStringAsync ();

кто-то предложил использовать вместо него

  ReadAsStreamAsync();

и вывести его в файл, однако мне нужно вывести в виде строки «source», чтобы я мог проанализировать данные в другомфункция ..

Я также хотел бы добавить, что я запускаю потоки ..

Возможно ли, что

Response.Content

сохраняется в памяти даже после этогозавершил эту конкретную функцию? Нужно ли удалять / очищать память или содержимое после того, как я вернул их источнику?

1 Ответ

0 голосов
/ 21 февраля 2019

Рекомендуемое решение правильное.Похоже, что памяти операционной системы, в которой размещено ваше приложение, не хватает памяти.Чтобы обойти это, целесообразно записать поток в виде файла на диск, а не в память.TransferEncodingChunked также может помочь, но отправитель должен это поддерживать.

using (FileStream fs = File.Create("fileName.ext")
{
    ....
    var stream = await response.Content.ReadAsStreamAsync();
    await fs.CopyToAsync(stream);
    fs.Close();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...