Avatar billede brian0905 Nybegynder
27. november 2006 - 11:00 Der er 6 kommentarer og
2 løsninger

Liste filer fra bibliotek, hurtigt

Jeg er ved at lave en applikation, hvor brugeren har en mappestruktur i et TreeView, hvor når man klapper en node ud, så loader den mapper nedenunder denne, dette fungerer perfekt og tilpas hurtigt. Problemet opstår når en bruger klikker på en mappe så vil jeg vise alle de filer der ligger i mappen, det går også godt de fleste gange, der er der en acceptabel ventetid, det reelle problem er at brugeren har mulighed for at slå til at den skal vise filer rekursivt, dvs alle filer i alle undermapper, den trækker tænder ud, specielt hvis brugeren uforvarende kommer til at trykke på C:\. Mit spørgsmål er om der er en smart måde, og MEGET hurtig måde at liste alle filer i et bibliotek og underbiblioteker på... alternativt skal jeg bare udelukke det at brugeren må vælge at se filer rekursivt, men det vil jeg nødigt - dog er det lige nu den eneste mulighed, da det tager flere minutter (på en god dag) at liste filer fra C:\
Avatar billede segato Nybegynder
27. november 2006 - 13:40 #1
En ting jeg fandt ud med TreeView er at der er fler emåder at tilføje en node på. Og dne ene er meget hurtigere end den anden. Den ene måde er du i en node der allerede er tilføjet til dit træ, indsætter en masse childs. Dette er super langsomt. Den anden måde er at du laver en node i hukommelse, som du til føjer en masse childs til. Når du har tilføjet alt der skal tilføje, Add'er du din nye node til træet. Dette er MEGET hurtigere.
Avatar billede Syska Mester
27. november 2006 - 14:14 #2
hmmm, er det ik' det samme hvis man bruger tv.BeginUpdate() og tv.EndUpdate() eller er det andet stadig _MEGET_ hurtigere ?

// ouT
Avatar billede segato Nybegynder
27. november 2006 - 14:42 #3
Det ved jeg faktisk ikke. Har ikke forsøgt den metode, muligvis.
Avatar billede rasmuskl Nybegynder
28. november 2006 - 12:03 #4
Det er vel et valg, du skal træffe, metoderne nævnt ovenfor er nok det bedste du kan præstere. Det du eventuelt kan vælge at gøre udover er at forsøge at pre-cache noget af dataen, men dette giver problemer med at filer / mapper kan have ændret sig. Tror ikke du finder en "let" måde at liste alle filer på et helt drev.

Hvis du vælger at pre-cache, kan du evt lave en worklist af directories (evt. sorteret, hvis du har en idé om hvor folk vil browse henad) og så bruge Application.Idle eventen til at tage opdatere din cache.. Men som sagt, det er noget mere avanceret og kan nok give andre problemer.
Avatar billede rasmuskl Nybegynder
28. november 2006 - 12:05 #5
Hov forresten, dertil skal det siges, at højst sandsynligt er dit problem ikke TreeView eller noget lignende, men nærmere at DirectoryInfo (som du sikkert bruger) - og derved disken, ikke kan følge med.
Avatar billede brian0905 Nybegynder
28. november 2006 - 12:26 #6
Jeg takker for indlæggene, skriv lige et par svar, problemet er netop at DirectoryInfo ikke kan følge med, var det bare listen så kunne jeg håndtere det. Efter at have kigget lidt rundt omkring har jeg valgt at droppe rekursionen i filvalg... det er bare ikke holdbart, så hellere en smule ekstra fra brugerens side med hensyn til at browse directories end at hele applikationen lukker i 10 minutter hvis man klikker på C:\
Avatar billede rasmuskl Nybegynder
28. november 2006 - 12:34 #7
Et svar :-)
Avatar billede segato Nybegynder
28. november 2006 - 14:03 #8
svar
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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