Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Brzina ListView kontrole

[es] :: Visual Basic 6 :: Brzina ListView kontrole

[ Pregleda: 3045 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

dejankol

Član broj: 116939
Poruke: 10
87.250.115.*



Profil

icon Brzina ListView kontrole14.11.2006. u 21:13 - pre 212 meseci
Interesuje me postoji li način da se ubrza rad ListView kontrole kod upisivanja velikog stavki (već preko 1000 radi neprihvatljivom brzinom). Problem je što sam u program duboko integrisao nekoliko ListView kontrola, tako da bi mi njihova zamjena prouzrokovala i mnogo truda i, vjerovatno, neke bug-ove.

Kontrole se pune stavkama kod učitavanja obrazaca i jedino što sam do sada uspio da uradim na tom planu jeste da obrasce na kojima se nalaze ListView kontrole učitam za vrijeme Splash obrasca i da ih za čitavo vrijeme izvršavanja čuvam učitane. Ovim dobijam brz rad u programu ali se zato program na sporijim mašinama pokreće i duže od minuta.

Radi se o stvarno velikom programu na kojem radim preko 5 godina.

Unaprijed Hvala!
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Brzina ListView kontrole14.11.2006. u 22:06 - pre 212 meseci
Broj redova u listview kontroli je ogranicen velicinom radne memorije, i zbog toga je najbolji prikaz za setove sa velikim brojem podataka DataGrid, posto on radi iskljucivo preko bookmarka, tj barata sa kompletnim podacima samo za vidljive redove, a za ostale podatke koristi samo bookmark sve dok ne postanu i oni "vidljivi" - to je banalno preveden koncept DataGrid kontrole, zahvaljujuci kome mogu da se ucitaju setovi sa neogranicenim brojem redova. Jednostavno i efikasno.

Popunjavanje ListView-a mozes ubrzati ako ga pre popunjavanja postavis nevidljivim, a tek po zavrsetku punjenja ga postavis vidljivim.

Takodje probaj da optimizujes samu petlju punjenja (ako je vec nisi optimizovao), mozes ovde staviti jedan primer punjenja (proceduru) pa ti mozda damo par saveta za optimizaciju (ako su moguci).
 
Odgovor na temu

dejankol

Član broj: 116939
Poruke: 10
87.250.115.*



Profil

icon Re: Brzina ListView kontrole14.11.2006. u 22:32 - pre 212 meseci
Ostao sam nedorečen maloprije!

Osnovna kontrola za prikaz podaka jeste DataGrid u mom programu, a list view koristim za (tada sam mislio) marginalnije stvari (nisam računao da će one baratati sa tako velikim nizovima podataka). Da kontrole su nevidljive tokom punjenja. Čak je i sam obrazac na kojem se nalaze kontrole nevidljiv (učitavam ga za vrijeme podizanja programa). Kod za punjenje je prečišćen maksimalno a čak sam i nešto improvizovao pomoću timera i DoEvents, tako da sam uspio napraviti kod koji puni ListView paralelno sa izvršenjem drugih dijelova koda i time dobio dodatno ubrzanje.

Glavnu grešku sam napravio za vrijeme planiranja programa kada sam uopšte upotrijebio ListView. Eto, nadao sam se (i još se nadam) da neko od vas starih programerskih lisaca zna za neku caku kako da prevaziđe ograničenja ListView kontrole.

Kako stvari stoje, ne ginu radikalne izmjene.
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: Brzina ListView kontrole14.11.2006. u 22:37 - pre 212 meseci
Ako si ListView odabrao zbog mogucnosti bogatijeg formatiranja, mozda bi mogao da ga zamenis sa FlexGrid kontrolom, punjenje bi islo istom logikom i ne bi bilo toliko tesko izmeniti kod.

Dao si odlican primer (nazalost) koliko je bitan izbor i poznavanje ActiveX kontrola koje se koriste ili ce se koristiti u aplikaciji.
 
Odgovor na temu

icobh
Igor Pejašinović
Network Admin
Navigo SC d.o.o.
Banja Luka

Član broj: 18738
Poruke: 1319
*.inecco.net.

Sajt: www.nsc.ba


+4 Profil

icon Re: Brzina ListView kontrole15.11.2006. u 06:54 - pre 212 meseci
Ja sam skoro radio jedan projekat, jest da nije korišten ListView već ListBox, ali sam imao slične probleme. U VB-u se kod mene nije moglo dodati u tu kontrolu više od 32.768 zapisa a meni je trebalo oko 50.000, stoga sam napravio biblioteku u C-u koja će da pri podizanju programa da popuni taj ListBox. Što ovo pričam? Ta implementacija, C + VB, puni 50.000 zapisa u roku od 4 sek. na mašini od 1.6GHz. Ista takva implementacija sama u VB-u, trošila je 28 sek. i naravno nisu mogli ni stati svi zapisi...
I ♥ ♀

Ovaj post je zlata vrijedan!
 
Odgovor na temu

dejankol

Član broj: 116939
Poruke: 10
87.250.115.*



Profil

icon Re: Brzina ListView kontrole15.11.2006. u 11:45 - pre 212 meseci
@goranvuc

Prelazak na FlexGrid je definitivno jedino rješenje i ja sam već počeo raditi na tome. Problem je jedino što ću izgubiti sigurno više od mjesec da to odradim onako kako valja. Jednostavno, ne mogu opisati koliko mi stvari u programu zavisi od postojećih ListView kontorla.

Što se tiče nepoznavanja funkcionalnosti kontrola, to je priča za sebe. Ali eto hoću da naglasim svima koji to ne znaju da definitivno ne treba koristiti ListView ukoliko postoji mogućnost da će ona baratati sa velikim količinama podataka. FlexGrid je mnogo brža kontrola, a uz malo truda da se fino i formatirati.

Problem je i što ja u vrijeme kada sam počinjao rad u ovom programu nisam poznavao ni materiju koju program obrađuje, a nisam imao sreće ni da naiđem na kvalitetne konsultante. Definitivno, planiranje je najvažniji proces u toku izrade jednog programa.

@icobh

Zanimljivo rješenje. Pokušaću nešto slično, mada mi C/C++ nije jača strana!


P.S. Zahvaljujem svima na pokazanoj želji i volji da mi pomognu pronaći rješenje!
 
Odgovor na temu

mladenovicz
Zeljko Mladenovic
Xoran Technologies, Inc., Ann Arbor, MI,
USA / Software Engineer
Ann Arbor, MI, USA

Član broj: 6598
Poruke: 2065
*.ded.ameritech.net.

Jabber: mladenovicz@elitesecurity.org
ICQ: 95144142
Sajt: yubc.net/~mz


Profil

icon Re: Brzina ListView kontrole15.11.2006. u 15:58 - pre 212 meseci
U principu, mozes da napravis svoj "data source" gde ces da cuvas podatke, a na formi imas listview i scroll bar. Max vrednost za scrollbar je broj itema u data sourceu, a Listview prikazuje uvek samo n itema, a nakon scrollovanja se list view prazni i puni sledecim setom podataka.
 
Odgovor na temu

dejankol

Član broj: 116939
Poruke: 10
87.250.115.*



Profil

icon Re: Brzina ListView kontrole15.11.2006. u 22:24 - pre 212 meseci
Veoma efikasno rješenje! Razmišljao sam o nečemu sličnom ranije, ali (bog me ubio ako znam zašto) tada mi se to nije učinilo kao rješenje mog problema. Sada kada sam još jednom pregledao kod vidim da je sasvim izvodljivo.

Iako to nisam pomenuo, postoji veliki broj situacija gdje se pomenute ListView kontrole automatski scroluju i pokazuju na određeni zapis. U odnosu na tvoju sugestiju samo ću još preraditi kod tako da se kod automatskog scoralanja zapisi traže direktno u bazi i da se onda pozove procedura koja će učitati u ListView segment zapisa u kojem će biti vidljiv potrebni zapis.

Ljudi sila ste, svi ovako zajedno!
Obavezno ću napisati šta sam uradio.
 
Odgovor na temu

batalule

Član broj: 39086
Poruke: 105
*.magnetplus.net.



Profil

icon Re: Brzina ListView kontrole15.11.2006. u 23:49 - pre 212 meseci
Citat:
U principu, mozes da napravis svoj "data source" gde ces da cuvas podatke, a na formi imas listview i scroll bar. Max vrednost za scrollbar je broj itema u data sourceu, a Listview prikazuje uvek samo n itema, a nakon scrollovanja se list view prazni i puni sledecim setom podataka.


Ja koristim slican koncept... Napravim klasu kakva mi odgovara modelu podataka i onda napunim kolekciju klasama. U ovom konceptu klasa najcesce ima samo dva svojstva: neki Id (jedinstveni identifikator) i neko tekstualno svojstvo (koje prikazujem kao tekst u list view-u). Normalno ako mi treba vise od toga onda i klasa ima vise svojstava ili neku metodu.
U svakom slucaju podatke ne prikazujem direktno vec iz kolekcije u setovima. Kod app sa bazom se stvar ionako svodi na "otvoris konekciju - uzmes (ili ostavis) neki set podataka - zatvoris konekciju - neka obrada" pa onda ispocetka - "otvoris konekciju...." onda tu logiku primenis i u programu - operises sa onolikim setom koliki ti je potreban da uradis posao ili da korisniku zamazes oci da je sve pod kontrolom:-)). U svakom slucaju moj savet glasi da bezis (kad god je moguce) od koncepata gde sve odmah dignes u memoriju (ili u prikaz) jer ces uvek imati "sveze" podatke a i iskren da budem: koja je svrha servirati nekom odjedanput n hiljada stavki kad on jedva da moze da u svoj mozak smesti 50?
 
Odgovor na temu

dejankol

Član broj: 116939
Poruke: 10
87.250.115.*



Profil

icon Re: Brzina ListView kontrole16.11.2006. u 01:30 - pre 212 meseci
@batalule

Mnogo hvala na odgovoru!

Kao što rekoh negdje iznad gore, program je jako veliki i veoma dugo radim na njemu. ListView kontrole su bile predvidjene za prikaz podataka korisniku, ali su se vremenom i raznoraznim modifikacijama pretvorile u nesto sasvim drugo. Nisam ni mislio da ću nekada imati problem sa brzinom rada programa. Sada mi je jasno da sam gresku napravio jos od samog pocetka, KOD PLANIRANJA. Što se tiče pomenutog koncepta podizanja u memoriju to je samo prinudno i privremeno rješenje kako bih postigao na utisku da program radi brže (sve se učitava tokom splash-a a ne kada korisnik izabere stavku u meniju).

Nisam mislio da će se ova diskusija razvući ovako široko, ali eto kada pričamo trenutno pravim i novu verziju programa (u kojem su kolekcije osnova rada sa podacima) gdje je sve (bar za sada) cakum-pakum. Do završetka nove verzije, stara verzija programa se mora održavati. Trenutno mi je ovo najveći problem i na putu sam da ga prevaziđem zahvaljujući vašoj pomoći.

I od sada svaki segment koji uradim, a koji barata sa podacima, testiram sa jaaako velikim brojem podataka.
 
Odgovor na temu

[es] :: Visual Basic 6 :: Brzina ListView kontrole

[ Pregleda: 3045 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.