c # Огромное наращивание памяти с HttpWebRequest - PullRequest
0 голосов
/ 29 сентября 2019

Здравствуйте. У меня проблемы с httpwebrequest, огромные накопления памяти при запуске довольно большой программы, основанной на запросах.Единственное реальное место, где может происходить сборка - это чтение потока после отправки запроса, как мне бороться с этим или, что еще лучше, установить ограничение для такого рода вещей?

У меня также есть различные (10-15) если операторы ищут в теле ответа разные вещи, но собираются заменить их на оператор switch, хотя я сомневаюсь, что они вызывают такое большое наращивание памяти, я подумал, что было бы лучше упомянуть их.Мой запрос выглядит так:

HttpWebResponse response = null;

            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);


                request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0");
                request.Headers.Add("Upgrade-Insecure-Requests", @"1");
                request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36 OPR/63.0.3368.88";


                response = (HttpWebResponse)request.GetResponse();

                string _responseData = new StreamReader(response.GetResponseStream()).ReadToEnd();

            catch (WebException e)
            {

            }
            catch (UriFormatException p)
            {


            }

Как вы можете видеть, мой поток читается обратно через _responseData, который я затем использую .contains, чтобы увидеть, есть ли то, что я ищу.

1 Ответ

2 голосов
/ 29 сентября 2019
  • Установите для HttpWebRequest.AllowWriteStreamBuffering значение false.
  • Удалите HttpWebResponse, Stream и StreamReader.
            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.AllowWriteStreamBuffering = false;

                request.Headers.Set(HttpRequestHeader.CacheControl, "max-age=0");
                request.Headers.Add("Upgrade-Insecure-Requests", @"1");
                request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36 OPR/63.0.3368.88";

                string _responseData;

                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    using (Stream stream = response.GetResponseStream())
                    {
                        using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))
                        {
                            _responseData = sr.ReadToEnd();
                        }
                    }
                }
            }
            catch (WebException e)
            {

            }
            catch (UriFormatException p)
            {

            }
...