Программа выполняет множество HTTP-запросов через restsharp в цикле. На старте объявляется клиент (объявляется 1 раз, затем используется):
IRestClient client = new RestClient();
IRestRequest request = new RestRequest();
В методах соответственно:
request.Resource = "url";
IRestResponse content = client.Get(request);
И с каждым таким запросом использование оперативной памяти увеличивается ровно на размер страницы. Память очищается с помощью GC только при выходе из цикла.
UPD: Больше кода с моими комментариями:
request.Resource = "url";
IRestResponse content = client.Get(request); // делаем запрос
Далее регекс:
Regex stranica = new Regex(@"(регекс)");
Match stranica1 = stranica.Match(content.Content); // выдергиваем из страницы ее часть (от-до)
Далее ищем в том, что "выдернули" слова:
Regex r = new Regex(string.Join("|", regex), RegexOptions.IgnoreCase);
Match m = r.Match(stranica1.Value);
Если нашли одно из слов делаем действие все на том же сайте:
Regex hash = new Regex(@"(регекс)");
Match hash2 = hash.Match(content.Content);
request.Resource = "url";
request.AddParameter("par1", hash2.Value, ParameterType.QueryString);
client.Post(request);
check_task(url, id_task); // идем к методу который проверяет то, что сделали (там уже никакой памяти программа не занимает фактически)
По графику использования оперативки вижу, что память использует самый первый блок кода (где IRestResponse content = client.Get(request); // делаем запрос) и в последнем блоке. Адрес запроса там одинаковый. И вот этот, казалось бы простой, код выполняется в 10-100 асинхронных потоков и со временем забивает всю ОЗУ)
UPD2: такая вот картинка в профайлере. РестРеспонс и так все ясно, а стринг - как я понимаю - // выдергиваем из страницы ее часть (от-до) из кода выше. Скриншот для наглядности и время работы тут - 10 минут. Начинали с 30 мб, через час тут будет 1 ГБ, а через 10 часов - 10 гб. И элементы нагружающие память останутся такими же.

IRestResponse contentкак минимумDisposable. – EvgeniyZ Apr 15 '21 at 16:45IRestResponse contentнаusing var content. С кодом я вам не помогу, ибо не очень люблю эту либу, да и вообще не особо вижу в ней смысла, из-за чего ставить не особо охото) А "подробней".disposableобъекты надо оборачивать вusing, либо вызывать.Dispose()метод, чтоб они успешно закрылись и подчистили за собой. Запросы обычно являютсяdisposable, как в либо - без понятия. – EvgeniyZ Apr 15 '21 at 16:54HtmlAgiltyPackиHttpClientс асинхронностью в любом случае актуальны. – aepot Apr 15 '21 at 18:05