HttpWebRequest, расход памяти непомерно больших объемов и , как следствие, утечка памяти - C#

Узнай цену своей работы

Формулировка задачи:

Добрый вечер. Мне была поставлена такая задача. Написать приложение, которая загружает из списка ссылки с сайта и ищет там определенную строку. Вот код
 public static void th(object sender)
        {
 
            while (true)
            {
                try
                {
    
                    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.мой сайт.ru/index.php?" + stack.Pop());
               
                    HttpWebResponse response;
           
                    request.ServicePoint.ConnectionLimit = ServicePointManager.DefaultPersistentConnectionLimit;
                    
                    response = (HttpWebResponse)request.GetResponse(); 
             
                    StreamReader sr = new StreamReader(response.GetResponseStream());
                    if (sr.ReadToEnd().IndexOf("Слово для поиска") > -1)
                    {
                        Valid++;
                        AddValid(request.RequestUri.ToString() + "\n");
                    }
                    Count++;
                    GC.SuppressFinalize(request);
                    GC.SuppressFinalize(response);
               
                    sr.Dispose();
                    sr.Close();
                }
                catch  
                {
            
                }
            }
        }
Этот метод должен выполняться в 1000 потоках. Программа работает нормально, но если посмотреть в TaskManager, то не трудно заметить как она поглощает используемое ОЗУ, после чего когда она доходит до одного гига происходит учетка памяти. Подскажите пожалуйста, что я не так делаю, может что-то не очистил, или из-за вечного цикла?

Решение задачи: «HttpWebRequest, расход памяти непомерно больших объемов и , как следствие, утечка памяти»

textual
Листинг программы
while (true)
            {
                try
                {
                     HttpWebRequest request;
                    lock (stack)
                    {
                        request = (HttpWebRequest)HttpWebRequest.Create("http://www.сайт.ru/index.php?" + stack.Pop());
                    }
                    HttpWebResponse response;
 
                    request.ServicePoint.ConnectionLimit = ServicePointManager.DefaultPersistentConnectionLimit;
 
                    using (response = (HttpWebResponse)request.GetResponse())
                    {
 
                        StreamReader sr = new StreamReader(response.GetResponseStream());
                        if (sr.ReadToEnd().IndexOf("Слово поиска") > -1)
                        {
                            
                                Valid++;
                         
                            AddValid(request.RequestUri.ToString() + "\n");
                        }
                     
                            Count++;
                       
                        GC.SuppressFinalize(request);
                        GC.SuppressFinalize(response);
 
                        sr.Dispose();
                        sr.Close();
                        response.Close();
                    }
                }
                catch(Exception ex)
                {
                    Console.WriteLine("Error: " + ex.Message);
                }
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5
Похожие ответы