|
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
navrekkoo
Dołączył: 17 Sty 2010 Posty: 14
Podziękował: 0 Łącznie otrzymał 0 podziękowań w 0 postach
Ostrzeżenia: 0/5
|
Wysłany: Wto Gru 27, 2011 20:40 Temat postu: Propozycja poprawy programu - multi tasking! |
|
|
Program jest przydatny, wspaniały, niezastąpiony - naprawdę wielkie dzięki za NapiProjekt. Niemniej jednak program, który wyszukuje napisy do, powiedzmy, 40 plików w katalogu, powinien w swojej łaskawości zezwolić innym programom na w miarę bezproblemową pracę w tym samym czasie - zwolnić nieco zasobów, tak żeby nie zmulał całego kompa i wszystkich programów naokoło! W końcu, co by nie mówić o skomplikowaniu procesu wyszukiwania napisów, nie jest to wyliczanie obiektów w Lightwave czy innym 3D Studio ani montowanie filmów w Premiere, więc zmulenie systemu, bo program szuka napisów, jest co najmniej dziwne i wygląda na brak podstawowej funkcji zwalniania zasobów w kodzie!
Nie znam się być może aż tak dobrze na programowaniu, wiem jednak z doświadczenia, że zmulić system można nawet przy pomocy VBA gdy nie zastosuje się DoEvents (w innych językach - MultiWait itp., w jeszcze innych - jeszcze inaczej zapewnie zwalnia się zasoby procesora). Bez tej funkcjonalności niekiedy strach odpalić program, zwłaszcza gdy trzyma się na dysku kilka(naście/dziesiąt) filmów, do których co jakiś czas wyszukuje się globalnie napisy.
Proszę! Sprawcie, żeby następna wersja (choćby beta) była dopracowana pod tym względem!
Z góry dziękuję. |
|
Powrót do góry |
|
|
Reklamiarz Członek zespołu
Ostrzeżenia:
|
Wysłany: Wto Gru 27, 2011 20:40 Temat postu: Klikając w reklamę wspierasz serwis |
|
|
|
|
Powrót do góry |
|
|
admin Członek Zespołu NapiProjekt
Dołączył: 04 Cze 2006 Posty: 1859
Podziękował: 5 Łącznie otrzymał 51 podziękowań w 50 postach
Ostrzeżenia: 0/5
|
Wysłany: Czw Gru 29, 2011 18:52 Temat postu: |
|
|
Co rozumiesz poprzez zamulanie?
Zabieranie całej mocy procesora? Nie powinno być z tym problemu, ponieważ zadania są kolejkowane. Natomiast faktycznie trochę cieknie pamięcią, co zostanie zapewne poprawione. |
|
Powrót do góry |
|
|
navrekkoo
Dołączył: 17 Sty 2010 Posty: 14
Podziękował: 0 Łącznie otrzymał 0 podziękowań w 0 postach
Ostrzeżenia: 0/5
|
Wysłany: Pią Gru 30, 2011 11:11 Temat postu: |
|
|
Kolejkowanie a zabieranie mocy procesora to dwie różne sprawy. Nawet malutki program, który nie zwalnia zasobów, może zamulić komputer. I to właśnie robi napi-projekt - kradnie focusa (to na pewno, nawet gdy jest w tle, aktywuje się bez potrzeby - wpisanie niekiedy adresu w przeglądarce lub kliknięcie w link podczas pracy napi-projektu to nie lada wyczyn) oraz zamula całkowicie system.
Ja może niezbyt dobrze to tłumaczę ale proszę zobaczyć na przykładzie visual basica i funkcji DoEvents:
http://vb4all.pl/teoria/iso2/funkcje/doevents.htm
Czyli - oddawanie sterowania systemowi operacyjnemu, nie traktowanie własnego programu jak jedynego uruchomionego procesu, który użytkownicy śledzą z zapartym tchem.
Innymi słowy, zgodnie z tym co jest napisane przy opisie DoEvents: "Funkcja DoEvents oddaje sterowanie aby system operacyjny mógł wykonać inne zdarzenia". Jak widać nie chodzi tu o brak kolejkowania ani o to, że system przestaje działać, tylko o to, że program, który działa egoistycznie, bez umożliwiania innym programom współdziałania, zawsze zmuli system i inne programy. Fakt, że Windows jest systemem posiadającym multitasking to nie wszystko - niekiedy trzeba dać multitaskingowi szansę.
Nie wiem w jakim języku jest pisany NapiProjekt, nie jestem jakimś dobrym programistą, ale tego typu problemy występują, zwłaszcza w takich małych programach. Windows nigdy nie pozwoli przejąć wszystkich zasobów, jednak program może znacznie utrudnić działanie innych programów.
PS. W google, jak zauważyłem, sporo ludzi pyta o DoEvents w C++. Na przykład: http://www.xtremevbtalk.com/showthread.php?t=82094
PPS. Jeszcze gdzieś indziej przeczytałem o Application.ProcessMessages w Dephi: http://4programmers.net/Delphi/Artykuły/Animacje
PPPS. Mam nadzieję, że chociaż trochę pomogłem. |
|
Powrót do góry |
|
|
admin Członek Zespołu NapiProjekt
Dołączył: 04 Cze 2006 Posty: 1859
Podziękował: 5 Łącznie otrzymał 51 podziękowań w 50 postach
Ostrzeżenia: 0/5
|
Wysłany: Pią Gru 30, 2011 12:46 Temat postu: |
|
|
Kolejkowanie ma tu dużo do znaczenia, może krótko opiszę jak działa program:
W przypadku pobierania kilkudziesięciu napisów, obliczanie hasha, pobieranie, oraz "obrabianie" napisów odbywa się w wątkach, maksymalnie jednocześnie takie wątki są uruchomione 3, reszta czeka grzecznie w kolejce na zakończenie pracy przez wcześniej uruchomione wątki. Z moich obserwacji wynika, że te 3 jednocześnie pracujące wątki maksymalnie obciążają procsor w 80%, co na moim kilku letnim komputerze (Core 2 Duo 2,2Ghz) nie powoduje zwolnienia pracy systemu, podczas testów program dobrze sobie radził nawet przy 10 wątkach i nie powodował lagów systemu.
Co do Application.ProcessMessages uważam iż przy obecnej konstrukcji programu jest ono niepotrzebne, ponieważ program wszytskie operacje obciążające procesor wykonuje w wątkach (tak więc system ma cały czas dobry dostęp do aplikacji).
Poniżej cytat z http://www.lukas-home-page.ovh.org/artykuly/delphi-watki.php
Cytat: | Zapewne wielu z Was spotkało się kiedyś z syndromem "zawieszania" się programu np. podczas wykonywania skomplikowanej czynności. Tak naprawdę aplikacja wtedy działa, ale nie odbiera od systemu komunikatów, np. o konieczności odświeżenia okna, co jest szczególnie widoczne gdy formularz naszego programu przysłonimy (a następnie odsłonimy) jakimś innym oknem. Wówczas formularz naszej aplikacji staje się cały biały, a przy dłuższych tego typu "brakach reakcji" system oznacza program jako ten który "nie odpowiada". W rzeczywistości oznaczenie "nie odpowiada" jest tak naprawdę stwierdzeniem, iż nasz program nie obiera komunikatów wysyłanych mu przez system. Co więc robić by uniknąć tego czarnego scenariusza ? Są na to dwie metody. Pierwszą metodą jest wstrzelenie instrukcji Application.ProcessMessages gdzieś w pętlę; tą która powoduje, że program się zawiesza. Druga, to bardziej skomplikowana metoda którą właśnie z tego względu się dzisiaj zajmiemy. Zadanie takie można powierzyć do rozwiązania wątkom. |
Co do zwalniania zasobów pamięci (które nie mają nic wspólnego z Application.ProcessMessages, oraz z obciążeniem procesora) to faktycznie program nie zwalnia całej pamięci, natomiast nie powinno to mieć większego wpływu na obciążenie systemu (chyba że pamięć RAM jest w 100% zajęta)
Załaczam filmik obrazujący obciążenie:
http://www.napiprojekt.pl/forum_pliki/obciazenie.mp4
Dziekuję za rady, ale wydaje mi się, że nie tutaj leży problem. Jakie jest średnie obciążenie u Ciebie? Może mógłbyś podesłać podobny filmik? Jaki masz komputer/system?
EDIT:
Co do focusa, to program zmienia go tylko raz (aby wyświetlić okienko nad przeglądarką)
EDIT2: Może masz ustawione włączanie przeglądarki po pobraniu/nieznalezieniu napisów? Może te 40 stron które się prawie jednocześnie otworzyły spowodowały duże obciązenie? |
|
Powrót do góry |
|
|
navrekkoo
Dołączył: 17 Sty 2010 Posty: 14
Podziękował: 0 Łącznie otrzymał 0 podziękowań w 0 postach
Ostrzeżenia: 0/5
|
Wysłany: Pią Gru 30, 2011 13:25 Temat postu: |
|
|
Wszystkie zbędne opcje mam powyłączane, pobierają się tylko napisy, nie wyświetlają się żadne okienka przeglądarki.
W moim wieloletnim doświadczeniu w obcowaniu z programistami niejednokrotnie już spotkałem się z tłumaczeniami typu "wszystko powinno działać bez problemu, nic nie powinno obciążać, jest wystarczający zapas" itd. itp. Teoria swoje, praktyka swoje.
Mój komp to Core 2 Duo 2.67 GHz, XP SP3, 2 GB pamięci, 8800GT.
Zaciekawił mnie fragment "3 jednocześnie pracujące wątki maksymalnie obciążają procsor w 80%". Jeżeli w takim programie jak napi-projekt 3 wątki obciążają procesor w 80% to nie jest to "tylko". To jest "aż"! W tym momencie odpaliłem trailer filmu HD w youtube bez akceleracji sprzętowej i Opera ma 50% obciążenia w porywach, po czym spada do 20-30%. Przy tej ilości danych, program pobierający napisy z netu powinien mieć 2-3% obciążenia procesora a nie 80%!
Jak wspomniałem - chwalę program, wiem że wielu programistów jest w jakiś sposób sfrustrowanych gdy amator wytyka błędy, ale to naprawdę miłe gdy nieraz ktoś spróbuje nie bić się z rzeczywistością. Przywieszanie programów przez napi-projekt jest faktem - upierdliwym faktem w dodatku dla kogoś kto od lat używa komputerów i dla kogo szybkość pracy jest głównym kryterium oceny programów (tutaj, niestety, polskie programy wypadają często najgorzej). "Przy obecnej konstrukcji programu jest ono (Application.ProcessMessages - przyp.) niepotrzebne"? Być może. Ale wstawienie tego jako opcji w programie, choćby dla potrzeb testów w jakiejś wersji beta, byłoby miłe. Chociażby na zasadzie "[x] multiwait - testowa opcja mogąca zmniejszyć obciążenie procesora na wolniejszych komputerach".
Zajętość procesora też niewiele tu pomoże, ponieważ program przywiesza inne programy skokowo, nie ciągle (domyślam się, że niektóre procedury są bardziej obciążające niż inne).
Ewentualnie wprowadzenie dodatkowego parametru "process priority" mogłoby tu pomóc jeżeli rzeczywiście jest taka niechęć do stosowania funkcji zwalniających zasoby dla pozostałych tasków.
A to screenshot porównawczy:
http://www.rat.net.pl/cpuusagenapi.gif
PS. Chętnie też "zaopiekuję się" wersją "beta" z dodaną funkcją Application.ProcessMessages tu i ówdzie - potestuję i powiem czy pomogło. Jeżeli autor będzie tak miły oczywiście. |
|
Powrót do góry |
|
|
admin Członek Zespołu NapiProjekt
Dołączył: 04 Cze 2006 Posty: 1859
Podziękował: 5 Łącznie otrzymał 51 podziękowań w 50 postach
Ostrzeżenia: 0/5
|
Wysłany: Pią Gru 30, 2011 13:58 Temat postu: |
|
|
navrekkoo napisał: |
Zaciekawił mnie fragment "3 jednocześnie pracujące wątki maksymalnie obciążają procsor w 80%". Jeżeli w takim programie jak napi-projekt 3 wątki obciążają procesor w 80% to nie jest to "tylko". To jest "aż"! W tym momencie odpaliłem trailer filmu HD w youtube bez akceleracji sprzętowej i Opera ma 50% obciążenia w porywach, po czym spada do 20-30%. Przy tej ilości danych, program pobierający napisy z netu powinien mieć 2-3% obciążenia procesora a nie 80%!
A to screenshot porównawczy:
http://www.rat.net.pl/cpuusagenapi.gif
|
Ilość pobieranych danych z internetu jest nie duża, natomiast program pobiera dane również z dysku. Takie zachowanie jak na wykresie jest zupełnie normanle, porgram oblicza 2 hashe md5 dla każdego pliku filmowego. Ciekawi mnie jakby wyglądałby u Ciebie wykres obliczający hash md5 120 plików? Pozatym gdyby wyciagnąć średnie obciążenie, procesora to podejrzewam że w obu przypadkach byłoby podobne, a że wykres zawieras "duże szczyty" obrazuje to tylko chwilowe obciążenie podczas obliczania hasha.
navrekkoo napisał: |
"Przy obecnej konstrukcji programu jest ono (Application.ProcessMessages - przyp.) niepotrzebne"? Być może. Ale wstawienie tego jako opcji w programie, choćby dla potrzeb testów w jakiejś wersji beta, byłoby miłe. Chociażby na zasadzie "[x] multiwait - testowa opcja mogąca zmniejszyć obciążenie procesora na wolniejszych komputerach".
|
Nie chce mi się tłumaczyć, ale gdzie Ty to chcesz wsadzić, aby przyniosło efekt? W wątek?
navrekkoo napisał: |
Zajętość procesora też niewiele tu pomoże, ponieważ program przywiesza inne programy skokowo, nie ciągle (domyślam się, że niektóre procedury są bardziej obciążające niż inne).
|
Z przesłanego wykresu wynika, że program nie obciążył w 100% procesora, jak zatem możliwe jest przywieszenie pracy innych programów? Może wąskim gardłem jest tu transfer z dysku twardego?
navrekkoo napisał: |
Ewentualnie wprowadzenie dodatkowego parametru "process priority" mogłoby tu pomóc jeżeli rzeczywiście jest taka niechęć do stosowania funkcji zwalniających zasoby dla pozostałych tasków.
|
Ale jakich funkcji zwalniających zasoby? |
|
Powrót do góry |
|
|
navrekkoo
Dołączył: 17 Sty 2010 Posty: 14
Podziękował: 0 Łącznie otrzymał 0 podziękowań w 0 postach
Ostrzeżenia: 0/5
|
Wysłany: Pią Gru 30, 2011 14:14 Temat postu: |
|
|
"(...) Gdzie Ty to chcesz wsadzić, aby przyniosło efekt? W wątek?"
Nie wiem, nie mój program, ja gdy pisałem programy mniej więcej wiedziałem gdzie znajduje się najbardziej pożerająca zasoby pętla/funkcja/itd. i tam starałem się zwalniać zasoby, nawet kosztem nieznacznego spadku szybkości pracy programu.
Ale... szczerze, nie che mi się drążyć tematu, nie wiedziałem, że w jakiś sposób sprawię, że poczujesz się urażony (chociaż w końcu to zrozumiałe - jakiś amator daje Ci głupie rady, można to odbierać w ten sposób). Nie wiem gdzie konkretnie w kodzie masz coś zmienić, bo to nie mój program. Ja zgłaszam, że działa źle, że za dużo obciąża, dzięki czemu praca z komputerem staje się dobijająco irytująca i najrozsądniejszym rozwiązaniem jest poczekać aż napi-projekt skończy sprawdzać napisy (a nie tak to powinno działać). Ja podaję fakty a nie obliczenia i wykresy (na podstawie których zawsze można powiedzieć, że wszystko działa jak należy). Faktem jest, że mi spowalnia komputer (niekoniecznie obciążając w 100% procesor) w większym stopniu, niż wynikałoby to ze skomplikowania prostego bądź co bądź programu do pobierania napisów.
Jak wspomniałem - chciałem pomóc jednocześnie Tobie i sobie (zmniejszając mój poziom irytacji związany z użytkowaniem programu). Nie upieram się, że musisz cokolwiek w programie robić - to Twoje dzieło, ludzie są zadowoleni i to pewnie wystarczy. Ja ze swojej strony jednak nie dam sobie wmówić, że coś co mi zamula komputer działa szybko i bezproblemowo.
Powodzenia z nowymi wersjami.
PS. Tyle lat już w komputerach siedzę, że potrafię znaleźć problem, jeżeli wynika on z np. złego sterownika, słabej wydajności dysków itd. I nie, nie tu leży problem.
PPS. Weź też pod uwagę, że większość użytkowników prawdopodobnie pobiera napisy głównie do pojedyńczych plików; ja odkładam sobie do jednego katalogu wszystkie filmy, które napisów nie mają i co jakiś czas przeszukuję ten katalog w nadziei, że ktoś coś przetłumaczył - stąd też mój problem jest prawdopodobnie odosobniony. |
|
Powrót do góry |
|
|
netboy5
Dołączył: 07 Lis 2009 Posty: 8
Podziękował: 0 Łącznie otrzymał 0 podziękowań w 0 postach
Ostrzeżenia: 0/5
|
Wysłany: Czw Lut 02, 2012 11:18 Temat postu: |
|
|
U mnie jest podobnie. Przy większej ilości plików komp lekko przymula.
Ale u mnie to raczej pewne, że program tak mocno czyta z dysku, że nie daje możliwości normalnie porobić na kompie. Czasem ten problem nie występuje, ale jak już przytnie to tak jakbym konwertował film do rvmb w 2 watkach i jeszcze oglądał jakiś serial na kompie i robił na przeglądarce jednocześnie .... a nawet jakbym robił te 3 rzeczy naraz to i tak mi komp mocno nie przymula....
Czy na serio musi to aż tak ciągnąć danych z dysku? jak pobieram napisy do 30-40 filmów / odcinków serialu. to nie zależy mi by program pobrał wszystkie napisy w ciągu 10-15 sekund ale mogę trochę dłużej poczekać ... |
|
Powrót do góry |
|
|
admin Członek Zespołu NapiProjekt
Dołączył: 04 Cze 2006 Posty: 1859
Podziękował: 5 Łącznie otrzymał 51 podziękowań w 50 postach
Ostrzeżenia: 0/5
|
Wysłany: Czw Lut 09, 2012 12:49 Temat postu: |
|
|
W jednej z (najbliższych) przyszłych wersji zostaną dodane ustawienia związane z wydajnością programu. |
|
Powrót do góry |
|
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach
|
RSS
Powered by phpBB © 2001, 2005 phpBB Group
|