Avatar billede nubi19 Nybegynder
18. august 2005 - 10:21 Der 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)
Avatar billede bertelbrander Novice
18. august 2005 - 19:55 #1
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).
Avatar billede nubi19 Nybegynder
18. august 2005 - 20:53 #2
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.
Avatar billede bertelbrander Novice
18. august 2005 - 21:02 #3
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.
Avatar billede nubi19 Nybegynder
18. august 2005 - 21:42 #4
Ok, var blot hvis du lige vidste hvordan. Men jeg vil forsøge dit forslag :)
Avatar billede borrisholt Novice
25. august 2005 - 21:00 #5
Hvis dette spørgsmål stadig har din interesse, så vil jeg gerne kigge på det.

Jens B
Avatar billede nubi19 Nybegynder
26. august 2005 - 08:34 #6
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 :)
Avatar billede borrisholt Novice
26. august 2005 - 10:00 #7
Jeg skal bruge et nyt projekt, med en TTreeView på, og så din tråd som kommer data ind i det .. Og ikke andet.

Så skal jeg hacke det om så det kører stærkt.

Sendt dit projekt til Jens@Borrisholt.com så må vi få det postet på eksperten bag efter.

Jens B
Avatar billede borrisholt Novice
29. august 2005 - 21:40 #8
:o)

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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester