Попробуй, если не лайт версияЯ походу неправильно сформулировал. Задача-есть список доменов 500к
Нужно проверить сколько из них отвечают и открываются, чтобы на них зайти.
var Success = project.Lists["SuccessSiteList"];//Домены с успехом
var Error = project.Lists["ErrorSiteList"];//Домены с ошибкой
var siteList = project.Lists["siteList"];//Домены без http|https
int Tcount = siteList.Count / 99;//делим список доменов на 99, чтоб весь список в 100 потоков расфасовать
Parallel.For(0, 100, x => //100 потоков
{
List<string> TsiteList = new List<string>();
lock (CommonCode.SyncObject)
{
for(int u = 0; u < Tcount; u++)//Тут берем нужное количество в список потока
{
if(siteList.Count > 0)
{
TsiteList.Add(siteList[u]);
}
else
{
break;
}
}
}
if(TsiteList.Count > 0)
{
for(int i = 0; i < TsiteList.Count; i++)
{
string SiteDomain = TsiteList[i];//Берем юпс
var ping = new System.Net.NetworkInformation.Ping();
var result = ping.Send(SiteDomain);
if (result.Status == System.Net.NetworkInformation.IPStatus.Success)
{
lock (CommonCode.SyncObject)
{
Success.Add(SiteDomain);
}
}
else
{
lock (CommonCode.SyncObject)
{
Error.Add(SiteDomain);
}
}
}
}
});
А можешь такое же сделать для whois?Попробуй, если не лайт версия
Код:var Success = project.Lists["SuccessSiteList"];//Домены с успехом var Error = project.Lists["ErrorSiteList"];//Домены с ошибкой var siteList = project.Lists["siteList"];//Домены без http|https int Tcount = siteList.Count / 99;//делим список доменов на 99, чтоб весь список в 100 потоков расфасовать Parallel.For(0, 100, x => //100 потоков { List<string> TsiteList = new List<string>(); lock (CommonCode.SyncObject) { for(int u = 0; u < Tcount; u++)//Тут берем нужное количество в список потока { if(siteList.Count > 0) { TsiteList.Add(siteList[u]); } else { break; } } } if(TsiteList.Count > 0) { for(int i = 0; i < TsiteList.Count; i++) { string SiteDomain = TsiteList[i];//Берем юпс var ping = new System.Net.NetworkInformation.Ping(); var result = ping.Send(SiteDomain); if (result.Status == System.Net.NetworkInformation.IPStatus.Success) { lock (CommonCode.SyncObject) { Success.Add(SiteDomain); } } else { lock (CommonCode.SyncObject) { Error.Add(SiteDomain); } } } } });
ПишетПопробуй, если не лайт версия
Код:var Success = project.Lists["SuccessSiteList"];//Домены с успехом var Error = project.Lists["ErrorSiteList"];//Домены с ошибкой var siteList = project.Lists["siteList"];//Домены без http|https int Tcount = siteList.Count / 99;//делим список доменов на 99, чтоб весь список в 100 потоков расфасовать Parallel.For(0, 100, x => //100 потоков { List<string> TsiteList = new List<string>(); lock (CommonCode.SyncObject) { for(int u = 0; u < Tcount; u++)//Тут берем нужное количество в список потока { if(siteList.Count > 0) { TsiteList.Add(siteList[u]); } else { break; } } } if(TsiteList.Count > 0) { for(int i = 0; i < TsiteList.Count; i++) { string SiteDomain = TsiteList[i];//Берем юпс var ping = new System.Net.NetworkInformation.Ping(); var result = ping.Send(SiteDomain); if (result.Status == System.Net.NetworkInformation.IPStatus.Success) { lock (CommonCode.SyncObject) { Success.Add(SiteDomain); } } else { lock (CommonCode.SyncObject) { Error.Add(SiteDomain); } } } } });
Директивы using и общий код - должен быть кусокЧто может быть не так?
Есть. http://prntscr.com/ls1smzДирективы using и общий код - должен быть кусок
public static object SyncObject = new object();
Гетом это понятно, только например те страницы которые я проверяю - очень массивные. И при загрузке в 15 потоков у меня проц забивается до 90%.что за лол тут развели ...
шоканул просто от предложений
гетом заголовки хватать и все
если 200 значит ОК
все что кроме 200 != ОК
шаб в 5 кубиков... в многопотом и без прокси
using System.Threading.Tasks;Произошла одна или несколько ошибок
способ есть. Нужно отключить браузер в твоём "безбраузерном" чеккереЕсть. http://prntscr.com/ls1smz
Теперь пишет:
Выполнение действия CSharp OwnCode Произошла одна или несколько ошибок.
Гетом это понятно, только например те страницы которые я проверяю - очень массивные. И при загрузке в 15 потоков у меня проц забивается до 90%.
Вот и хотелось бы найти способ какой-то иной, чтобы разгрузить процессор или увеличить скорость работы.
Например такой автоматически сформированный говнокод: https://www.hochschulteam-dresden.com/пример такой массивной страницы скиньте
Это прописано: http://prntscr.com/ls1zw7using System.Threading.Tasks;
Это само собой разумеется сделал в первую очередь.способ есть. Нужно отключить браузер в твоём "безбраузерном" чеккере
зависит от регуляркиНапример такой автоматически сформированный говнокод: https://www.hochschulteam-dresden.com/
В среднем где-то по 1млн символов получается на страницу.
Это прописано: http://prntscr.com/ls1zw7
Это само собой разумеется сделал в первую очередь.
Правда, в том шаблоне, которые у меня чекает есть ещё два кубика с регуляркой и два if
Но я не думаю что из-за них может так нагружаться...
Суть в том, что я думал может можно как-то сделать пингатор без get запроса, чтобы отсеять лишние домены и не ждать, пока они ответят на get запрос
Обе вида (?<=<html\ lang=").*?(?=")зависит от регулярки
не знаю, почему у тебя такая нагрузка, но так быть не должноОбе вида (?<=<html\ lang=").*?(?=")
а что конкретно надо от страницы? зачем язык парсить?Обе вида (?<=<html\ lang=").*?(?=")
Нет, не в цикле, уже понял почему процессор забивается.может шаб в цикле?
через время весь проц забивает ...
при норм чеке думаю спокойно в 100 потоков залипить можно, с нагрузкой в 30-50%, смотря какой серв конечно
а что конкретно надо от страницы? зачем язык парсить?
надо узнать доступность страницы или что? чет этот момент не до конца понял
string Test = project.Variables["get_info"].Value;
string regexTest = System.Text.RegularExpressions.Regex.Replace(Test, @"[{}]", "");
return regexTest;
Благодарю, попробуюну можно так сделать
1. пропинговать страницы моим шабом он быстро вытянет рабочие
2. можно использовать этот сниппет, он удаляет ненужные символы, которые нагружают поиск и следовательно проц
get_info - это имя переменной куда кладется гет запросКод:string Test = project.Variables["get_info"].Value; string regexTest = System.Text.RegularExpressions.Regex.Replace(Test, @"[{}]", ""); return regexTest;
3. использовать регулярку уже по исправленному тексту
или
регуляркой вырезать первые 30-50 строк (туда обязательно попадут все заголовки и языки)
и уже из этого текста брать регулярку
Суть в том, что я думал может можно как-то сделать пингатор без get запроса
var Domains = project.Lists["Domains"];//Входящий список с доменами
var goodList = project.Lists["good"];
var badList = project.Lists["Bad"];
System.Net.NetworkInformation.PingReply pingReply = null;
project.SendInfoToLog(string.Format("Пингуем домены. Кол-во: {0} шт.", Domains.Count), true);
System.Threading.Tasks.Parallel.For(0, Domains.Count, i => {
string domain = Domains[0];
Domains.RemoveAt(0);
try
{
System.Net.NetworkInformation.Ping ping = new System.Net.NetworkInformation.Ping();
pingReply = ping.Send(domain);
project.SendInfoToLog(string.Format("Домен: {0} ответ есть. IP адрес: {1}", domain, pingReply.Address.ToString()), true);
goodList.Add(domain);
}
catch
{
if (domain != "")
{
project.SendInfoToLog("Домен: "+ domain + " не отвечает", true);
badList.Add(domain);
}
}
});