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);
}
}