Skocz do zawartości

[delphi] Indy - przyspieszanie pobierania listy plikow


Max1414

Polecane posty

Wie ktoś jak mogę zoptymalizowac ponizszy kod aby szybciej sie lista pobierala?? Bo przykladowo na wolnym laczu(nic sie nie pobiera itp) u mnie trwa to 10s na neo256, a w takich samych warunkach total commander i Internet Explorer odczytuje liste plikow w ok. 2s... jest roznica...

[delphi][/delphi]

Moje projekty: http://wojciechkulik.pl

Link do komentarza
Udostępnij na innych stronach

Przed tym całym pobieraniem daj:
[code=Delphi] (Sender as TListView).BeginUpdate;hui'(Sender as TListView).EndUpdate; [/code]

To wszystko dopiero wyświetli się po skonczeniu, a nie (niepotrzebnie) od razu... Przy np. kilkuset elementach jest spora różnica.

҉

Link do komentarza
Udostępnij na innych stronach

ciekawy bajer ale w TListView nie mam takiej wlasciwosci jak BeginUpdate i EndUpdate ... a w TIdFTP mam BeginWork i EndWork ale nie wiem za bardzo co wpisac w parametrach, ale to chyba nie chodzi o TIDFTP bo i tak by wyswietlalo na liscie proces pobierania
i tak btw. to chyba nie przyspieszy pobierania listy smile.gif a nawet jakby tych opcji nie bylo to mozna taka sama liste na tej wyswietlic zeby zaslonic stara, tyle ze to nie jest zbyt dobre rozwiazanie :]. Kurcze ciekawe czemu tak szybko total commander albo Internet Explorer pobieraja liste plikow

Moje projekty: http://wojciechkulik.pl

Link do komentarza
Udostępnij na innych stronach

CYTAT(Max1414)ciekawy bajer ale w TListView nie mam takiej wlasciwosci jak BeginUpdate i EndUpdate ... a w TIdFTP mam BeginWork i EndWork ale nie wiem za bardzo co wpisac w parametrach, ale to chyba nie chodzi o TIDFTP bo i tak by wyswietlalo na liscie proces pobierania
i tak btw. to chyba nie przyspieszy pobierania listy :) a nawet jakby tych opcji nie bylo to mozna taka sama liste na tej wyswietlic zeby zaslonic stara, tyle ze to nie jest zbyt dobre rozwiazanie :]. Kurcze ciekawe czemu tak szybko total commander albo Internet Explorer pobieraja liste plikowJest ListView1.Items.BeginUpdate, ListView1.Items.EndUpdate. Wątpię żeby to Ci całkowicie przyspieszyło kod (z 10sek do 2sek), ale na pewno trochę będzie się szybciej wykonywało. Może później jeszcze spróbuję przejrzeć i zobaczę u siebie co możnaby przyspieszyć.

[quote] a nawet jakby tych opcji nie bylo to mozna taka sama liste na tej wyswietlic zeby zaslonic stara, tyle ze to nie jest zbyt dobre rozwiazanie [/quote]Chodzi o to żeby komponent nie wyświetlał tych elementów niepotrzebnie za każdym razem, a nie żeby tego nie było widać. Bo każde wyświetlenie to jest sporo kodu (no i czasu).

҉

Link do komentarza
Udostępnij na innych stronach

[quote] Ok, dzieki łap \"pomogl\" :) Btw. stoperem mierzylem i identyczny efekt :P pomiedzy z \"Update\" a bez :] [/quote]To za co po "pomógł" jak nie pomogło ? I po co stoperem mierzyłeś ? :D

Nie lepiej:
[code=Delphi] var
t: Cardinal;
begin
t := GetTickCount;
{ ... koCBÓYYJ Z[XN
[
]X6VBBFbr6VrŚVćC
[/code]
? ;)

҉

Link do komentarza
Udostępnij na innych stronach

Ok, jak już dałeś "pomógł", to Ci pomogę ;)

Całe pobieranie zwalnia Ci:
[code=Delphi] Size:=(Sender2 as TIdFTP).Size(FileName); [/code]

Bo dla każdego pliku wysyła żądanie do serwera o pobranie rozmiaru pliku. Rozmiar dostajesz już w swojej tablicy, masz np linijkę:

[quote] '-rw-r--r-- 1 KKKas users 173979 Aug 2 09:32 nazwapliku.blabla.zip' [/quote]
To 173979 to jest rozmiar pliku. Z tego pobieraj rozmiar...

UPDATE: A, i czy to jest katalog czy nie, to możesz sprawdzać po tym czy pierwsza litera jest 'd' (directory) czy nie.
Jak tu np: "drwxr-xr-x"

҉

Link do komentarza
Udostępnij na innych stronach

hehehe no teraz to smiga jak samolot biggrin.gif DZIEKI WIELKIE!!! Na poczatku wlasnie rozmiar bralem z tej listy :] ale potem jakies problemy mialem i sprawdzalem w ten sposob i juz nie zmienilem z powrotem biggrin.gif a i przydatny ten sposob z folderami, tego nie wiedzialem smile.gif jeszcze raz dzieki wielkie!

A jeszcze takie mniej wazne pytanie mam: wie ktos moze jak pobrac date w standardzie dd-mm-yyyy probowalem to przekonwertowac za pomoca FormatDateTime ale to nie dziala bo nazwa miesiaca ta trzy literowa jest niezgodna... wiem ze mozna by zrobic tablice zamienic nazwe trzy literowa na taka jaka jest w standardzie opisowego formatu miesiaca w funkcji formatDateTime, a potem to sobie przekonwerowac na dd-mm-yyyy ale to by spowolnilo troche funkcje, tak mi sie zdaje smile.gif

Moje projekty: http://wojciechkulik.pl

Link do komentarza
Udostępnij na innych stronach

Weź sobie po prostu Copy(3 pierwsze litery z daty), zamien sobie to na numer miesiaca, dzien to bedzie 5 (i 6) znak i masz ;) Najprościej...

A co do tego spowalniania jeszcze... To jak masz taki problem, to sobie powsadzaj w niektóre fragmenty kodu takie coś:
[code=Delphi] Log('Czas wykonania: ' + IntToStr(GetTickCount - t) + ' miliZĘN [/code]
I póxniej patrzysz co najdłużej się wykonuje i spróbujesz dojść dlaczego, lub jak to inaczej zrobić...

҉

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...