Несколько потоков, получение кода страниц...

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

pakulo
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 08.01.2008 (Вт) 2:35

Несколько потоков, получение кода страниц...

Сообщение pakulo » 21.04.2008 (Пн) 1:28

Есть программа, она открывает разные странички сайта в несколько потоков, каждый поток открывает свою страницу, парсит ее, сохраняет данные на диск и снова открывает и парсит...
Одновременно открывает до 10 страниц...

Я сделал открытие все страниц паралельно... сделал это я так...
Создать свой копмонент, на форме расположил tab control, создал 10 закладок и добавил 10 компонент каждый в свою закладку (у меня компонент еще показывает статус через label и я могу передавать различные параметры, выбирая через форму что нужно)...
И запустил...

Получаю код страницы я через HttpWebRequest.
Занес открытие страниц в цикл, потому что процедура всегда повторяется (меняются параметры, по которым парсить).
Цикл в процедуре, которая вызывается потоком.

Появилась такая проблема, что чем больше страниц тем медленее они открываются и например если открывать 6 и больше то будет ошибка timeout (у меня он 20 секунд) для некоторых страниц. С чем это может быть связанно?

Если запустить 10 приложений и открыть в каждом свою ссылку, то работает все отлично...

Код приложу немного позже, может кто сталкивался с такой проблемой?

ACiD
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 261
Зарегистрирован: 10.12.2005 (Сб) 2:29
Откуда: г. Санкт - Петербург

Сообщение ACiD » 21.04.2008 (Пн) 1:38

В скорости соединения например :) , ведь ты увеличиваешь нагрузку!

pakulo
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 08.01.2008 (Вт) 2:35

Сообщение pakulo » 21.04.2008 (Пн) 16:19

Если бы...
Я уже написал...
Если запустить 10 приложений и открыть в каждом свою ссылку, то работает все отлично...

Т.е. если не делать через многопоточность, а запускать отдельно приложения, то все работает...

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 21.04.2008 (Пн) 17:03

Хм. Интересно, как реализована многопоточность.



Ведь каждая закладка в табконтроле не выполняется в своей нитке - они все работают в той же нитке, что и сама форма.



В NET насколько я помню есть компоненты типа backgroundworker, которые помогают распараллелить выполнение некоторых операций.



В конце концов можно вручную создавать нитки и поручать им выполнение некоторых задач.



Но надеяться на то, что положив 10 контролов на разные табы мы получим многопоточность - глупо.
I don't understand. Sorry.

pakulo
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 08.01.2008 (Вт) 2:35

Сообщение pakulo » 21.04.2008 (Пн) 18:32

Поток я создаю в контроллере так:

Код: Выделить всё
Dim t as new Thread(address of Start())
t.start()


Это вызывается при нажатии на кнопку.

В функции Start() содержится цикл с помощью которого мы постоянно парсим страничку... Получили код, вытянули нужные данные, снова получили и так далее...

Т.е. 10 табов, 10 контроллеров и в каждом контроллере уже создается свой поток.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 99

    TopList