BackGroundWorker wielokrotny w pętli while

0

Witam Panowie i może Panie :) Mam taki o to problem napisałem sobie aplikację przez którą łączę się z moim serwerem i zmieniam w nim nazwy plików wrzuciłem to w backgroundworkera i wszystko jest cacy :) tylko chodzi o to tzn gdy przypuśćmy tych plików jest 300 to muszę wykonać 300 zapytań
i nie nie mogę zrobić tego jednym zapytaniem musi być 300 licząc 1s na zapytanie daje nam to 5 minut przy jednym backgroundworkerze. Wszystkie zapytania dzieją się w pętli while dopóki pliki (te które są na serwerze są wylistowane) z listbox się nie skończą teraz moje pytanie jak by pod to podpiąć jeszcze jeden albo więcej backgroundworkerów ? Tylko właśnie jak to zrobić i tu zwracam się z prośbą

0

Siema jakbyś mógł troszkę bardziej opisać co masz do zrobienia to na pewno ułatwiłoby zadanie. Gdzie zmieniasz te nazwy plików, gdzie jest przetrzymywana lista, skąd jest ta lista itd.

Pierwsza odpowiedź to ... na pewno nie twórz 300 backgroundworkerów, bo nie :P Zastanów się czy musisz użyć backgroundworker, jeśli nie użyj Threadpool-ów i poczytać o semaforach, aby udostępnić z 10 wątków i aplikacja niech w nich przetwarza zadania, jak skończy jedno bierze następne itd.

Jako, że nie znam dokładnie co chcesz zrobić to mogę tylko naprowadzić. Znasz całą liste plików (tych do zmieniania nazwy) od razu ? Jeśli tak to wyślij do serwera całą listę i niech on bawi się jej przetwarzaniem. Jeśli zaś jest to SQL i musisz wykonać update, to zamiast 300 pojedynczych updatów może lepiej byłoby skleić jedno olbrzymie zapytanie sql, składające się 300 updatów i to wysłać sql, działałby na pewno szybciej ;)

0

I poczytaj w ogóle o wątkach. BackgroundWorker jest prostą w obsłudze klasą uruchamiającą wątek IMO dla aplikacji, które potrzebują tylko jeden(no czasem może więcej) działających w tle. Powinieneś samodzielnie popracować z wątkami bez pośrednictwa BW.

0

Znaczy tak może przedstawię to na podstawie hostingu plików
mamy hosting na hostingu mamy

  • 100 filmów w formacie .avi
  • 50 archiwów winrar format nowy .rar
    i tak aby zmienić nazwę pliku muszę wysłać zapytanie do strony metodą POST i podać parametry np
  • id pliku
  • id katalogu w którym się znajduje
  • nową nazwę dla pliku
  • itp
    i nagle dostałem świra i chcę zamienić nazwy we wszystkich plikach które zawierają w nazwie ".rar" na ".zip" tzn zamienić w nazwie pliku ".rar" na ".zip".
    No i tutaj wszystko działa tylko jest tak:
    Przyjmijmy:
    Czas Zapytania Post i otrzymania odpowiedzi: 1 sekunda zawsze dokładnie jedna ( wiadomo tak nie jest raz moze być poł raz 2 ale to na przykład )

Tak więc mamy 50 plików zawierających ".rar"
Wiec trochę matematyki
50 plików * 1 sekunda = Czas operacyjny 50 sekund.

No więc co tam 50 sekund to tam może sobie poczekać, ale jak by plików było 3000 ?
daje nam to Czas operacyjny 3000 sekund
3000 sekund / 60 sekund = 50 minut
50 minut czekania = Koniec świata 2012 - Według Majów co oznacza: jak już nie mam skarpet to nie będzie niczego ...

Tak więc chciałem to przyspieszyć tworząc np przy ilości plików 300 - 30 wątków a przy 100 - 10 wątków
Zmniejszyło by to wielokrotnie czas oczekiwania.
Dodam że wszystko mam w pętli
Działanie Pętli
int i = 0;
Foreach(int item in TablicaPlikow)
{
... string IDPliku = TablicaPlikow[i];
... tutaj parę kolejnych poborów z tablic
... string parametry = "cos=cos&cos=cos&cos=cos&cos=cos"; // tutaj wykorzystuje te pobory z tablic do stworzenia jednego stringa
... Zapytanie(url,parametry);
// i wiadomo tutaj pójdzie dalej jak zapytanie się zakończy i tak w kółko
}
// Ważne kod po zakończeniu pętli musi się wykonać po zakończeniu wszystkich zapytań także trzeba też obsłużyć moment zakończenia wszystkich wątków ;p chodź tutaj można by puścić jakieś liczenie zakończonych zapytań i by poszło więc jakoś obejdę tylko chodzi o te wątki ;/
jakasfunkcja();

0

Oj wygląda na to że sobie poradziłem dzięki chłopaki za pomoc pozdrawiam :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1