Тема: C#
Показать сообщение отдельно
Старый 11.02.2014, 18:56   #144
Игрок
 
Аватар для Pharaon
 
Регистрация: 14.06.2006
Адрес: Future
Сообщений: 672
Репутация: 159 [+/-]
[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<
stringListUrl;

        static 
void Main(string[] args)
        {
            
ListUrl File.ReadAllLines("BAZA.txt").ToList();
            var 
listThread = new List<Thread>();

            while (
true)
            {
                
listThread.Clear();
                
Parallel.For(0ListUrl.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 clientDownloadStringCompletedEventArgs 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());
        }
    }



Суть в том что работа потоков идет параллельно вплоть до того момента когда нам нужно скачать строку. В итоге чем больше ссылок тем дольше мы ждем окончания последнего потока (когда как они должны завершаться примерно одинаково).
__________________
Understanding is impossible...
Η κατανόηση είναι αδύνατο
理解することは不可能である
समझना असंभव है

Mr. Freeman +1

[url=https://deepbit.net][img]https://deepbit.net/userbar/4f1ea27f06917288bf000000_375ff6ce34.png[/img][/url]

Последний раз редактировалось Pharaon; 11.02.2014 в 19:02.
Pharaon вне форума  
Отправить сообщение для Pharaon с помощью ICQ Отправить сообщение для Pharaon с помощью Skype™ Ответить с цитированием