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); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д