18. august 2005 - 10:21Der er
7 kommentarer og 1 løsning
TTreeView performance i Borland C Builder
Jeg har et mindre problem med TTreeView komponentet i Borland C++ Builder 4.0.
Jeg vil fylde den ud med mappe strukturen fra f.eks. C drevet, hvis jeg lægger koden til dette i min "hoved" tråd, dvs. den der kører resten af programmet, får jeg én hastighed. Lægger jeg koden ud i en nyoprettet tråd til formålet, tager det ca. 5 gange så lang tid. Hvordan kan det være der er så stor forskel ? Jeg bruger BeginUpdate() kaldet, så den ikke laver repaint hele tiden, så det kan ikke være sådanne noget.
Al hjælp vil være værdsat, da det er lidt surt det tager 40 sekunder at finde mapperne i C:\Windows alene :/ (8 sekunder når det ligger i hovedtråden)
Og jeg kan ikke smide det i hovedtråden, da programmet jo så ikke svarer (kender godt DoEvents(), men det er IMO en dårlig lappeløsning)
Det eneste jeg kan forestille mig er at træet er en member i hoved tråden og at der dermed skal sende beskeder fra din worker-thread for at fylde i træet. Hvordan er træet oprettet? Er det BCB 4.0 ? (den er vist gammel).
Du sætter jo ord på mine tanker :) Jeg havde også en ide om at det var træet er member i hoved tråden. Men den er oprettet via det grafiske værktøj BCB jo er, så den er del af Form1 klassen, hvilket så vidt jeg kan læse mig frem til, er nødvendigt, da den skal have en parent der sørger for paint etc.
Men ja det er den nærmest oldnordiske BCB 4.0, jeg har ikke fået købt en nyere og den kan jo egentlig det den skal (dog er 64 bit integers lidt tricky :P)
Men har du en ide til, hvordan jeg får træet til ikke at være member i hovedtråden ? Jeg har prøvet at oprette et træ runtime i min worker-thread, jeg får en frygteligt masse fejl ud af det, typisk noget med at den ikke kan repaint, etc.
Jeg er ikke så meget inde i BCB, så jeg ved ikke hvordan man gør, men kan dog godt prøve.
Du kunne læse fil-træet og gemme data i en struktur i worker-tråden og så sende dette til hoved tråden og så putte data ind i dit TTreeView der. Jeg vil tro at hovedparten af tiden går med at læse fra disk, så det vil delvist løse problemet.
Det har så absolut stadigvæk min interesse, jeg er næsten for doven til at skrive en treeview lignende klasse, blot for at flytte data mellem den og selve treeviewet, så hvis du kender en bedre løsning, eller kan komme på en, vil det være rent guld :)
Jeg har lavet nogle tests, som viser det er TTreeView der er langsomme´. Dem har jeg sendt til nubi19 i en email.
Skulle andre være intresseret, så send mig en mail, og henvis til dette spm, så sender jeg dem til jer også.
Jens B
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.