[CCCP] Monster,
Попробовал сделать таким способом, но на серве походу стоит защита, данные получаются, но они намеренно искажаются (в данном случае получается номер телефона, если делать прямой запрос то код оператора всегда ставится фейковый). В конце концов использую awesomium (движок chromium без интерфейса) и доволен.
Но мой вопрос сейчас не об этом. То ли я чего-то недопонимаю, то ли что.
Задача следующая, вкратце. Составляется текстовый документ - каждая строчка ссылка на сайт. В программе я загружаю каждую ссылку, делаю парсинг контента и ожидаю повтора парсинга. Так вот путем нехитрых проверок пришел к выводу что System.Net.WebClient.DownloadString не распараллеливается. Пробовал его Async версию тоже самое. Подскажите что делать и как быть?
Полный текст тестовой программы:
Скрытый текст:
Цитата:
PHP код:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Threading; using System.Threading.Tasks; using System.Net; using System.Diagnostics;
namespace TestTest { class Program { static List<string> ListUrl;
static void Main(string[] args) { ListUrl = File.ReadAllLines("BAZA.txt").ToList(); var listThread = new List<Thread>();
while (true) { listThread.Clear(); Parallel.For(0, ListUrl.Count, new Action<int>((int i) => { var th = new Thread(new ParameterizedThreadStart(thread), ListUrl.Count); listThread.Add(th); th.Start(i); }));
Console.ReadLine(); } }
static void thread(object obj) { int i = (int)obj;
var text = ""; bool complete = false; Stopwatch sw = new Stopwatch(); sw.Start(); var cl = new WebClient(); cl.DownloadStringCompleted += new DownloadStringCompletedEventHandler((object client, DownloadStringCompletedEventArgs e) => { text = e.Result; complete = true; }); cl.DownloadStringAsync(new Uri(ListUrl[i]));
while (!complete) { Thread.Sleep(50); } sw.Stop(); Console.WriteLine(i.ToString() + " номер. " + sw.Elapsed.ToString()); } } }
|
Суть в том что работа потоков идет параллельно вплоть до того момента когда нам нужно скачать строку. В итоге чем больше ссылок тем дольше мы ждем окончания последнего потока (когда как они должны завершаться примерно одинаково).