HttpWebRequest, расход памяти непомерно больших объемов и , как следствие, утечка памяти - C#
Формулировка задачи:
Добрый вечер. Мне была поставлена такая задача. Написать приложение, которая загружает из списка ссылки с сайта и ищет там определенную строку. Вот код
Этот метод должен выполняться в 1000 потоках. Программа работает нормально, но если посмотреть в TaskManager, то не трудно заметить как она поглощает используемое ОЗУ, после чего когда она доходит до одного гига происходит учетка памяти. Подскажите пожалуйста, что я не так делаю, может что-то не очистил, или из-за вечного цикла?
Листинг программы
- 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
- {
- }
- }
- }
Решение задачи: «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);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д