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

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

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

Добрый вечер. Мне была поставлена такая задача. Написать приложение, которая загружает из списка ссылки с сайта и ищет там определенную строку. Вот код
Листинг программы
  1. public static void th(object sender)
  2. {
  3. while (true)
  4. {
  5. try
  6. {
  7. HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://www.мой сайт.ru/index.php?" + stack.Pop());
  8. HttpWebResponse response;
  9. request.ServicePoint.ConnectionLimit = ServicePointManager.DefaultPersistentConnectionLimit;
  10. response = (HttpWebResponse)request.GetResponse();
  11. StreamReader sr = new StreamReader(response.GetResponseStream());
  12. if (sr.ReadToEnd().IndexOf("Слово для поиска") > -1)
  13. {
  14. Valid++;
  15. AddValid(request.RequestUri.ToString() + "\n");
  16. }
  17. Count++;
  18. GC.SuppressFinalize(request);
  19. GC.SuppressFinalize(response);
  20. sr.Dispose();
  21. sr.Close();
  22. }
  23. catch
  24. {
  25. }
  26. }
  27. }
Этот метод должен выполняться в 1000 потоках. Программа работает нормально, но если посмотреть в TaskManager, то не трудно заметить как она поглощает используемое ОЗУ, после чего когда она доходит до одного гига происходит учетка памяти. Подскажите пожалуйста, что я не так делаю, может что-то не очистил, или из-за вечного цикла?

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

textual
Листинг программы
  1. while (true)
  2.             {
  3.                 try
  4.                 {
  5.                      HttpWebRequest request;
  6.                     lock (stack)
  7.                     {
  8.                         request = (HttpWebRequest)HttpWebRequest.Create("http://www.сайт.ru/index.php?" + stack.Pop());
  9.                     }
  10.                     HttpWebResponse response;
  11.  
  12.                     request.ServicePoint.ConnectionLimit = ServicePointManager.DefaultPersistentConnectionLimit;
  13.  
  14.                     using (response = (HttpWebResponse)request.GetResponse())
  15.                     {
  16.  
  17.                         StreamReader sr = new StreamReader(response.GetResponseStream());
  18.                         if (sr.ReadToEnd().IndexOf("Слово поиска") > -1)
  19.                         {
  20.                            
  21.                                 Valid++;
  22.                          
  23.                             AddValid(request.RequestUri.ToString() + "\n");
  24.                         }
  25.                      
  26.                             Count++;
  27.                        
  28.                         GC.SuppressFinalize(request);
  29.                         GC.SuppressFinalize(response);
  30.  
  31.                         sr.Dispose();
  32.                         sr.Close();
  33.                         response.Close();
  34.                     }
  35.                 }
  36.                 catch(Exception ex)
  37.                 {
  38.                     Console.WriteLine("Error: " + ex.Message);
  39.                 }
  40.             }

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


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

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

9   голосов , оценка 4.222 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы