Avatar billede fedtoere Praktikant
28. april 2014 - 13:26 Der er 5 kommentarer og
1 løsning

Hurtig sortering af ListBox i Delphi

Jeg har et ældre program hvor jeg sorterer en ListBox i Delphi via en Bubblesort funktion.
Det har hidtidigt virket fint for mig - men nu er mine data mængder blevet så store og samtidigt så sorterer jeg nu på en NAS (Linux system). Det giver mig problemer med lange eksekveringstider.

Mit spørgsmål er:

1) Forringer det hastigheden at jeg sorterer i ListBox[i], altså i selve ListBox data.

2)
Hvad er en rimelig forventet sorterinstid hvis man sorterer f.eks 5000 linier i en ListBox ?

3) Bør jeg lave en Quick-sort i stedet, eller andet ?

4) Forslag til sorteringskode
Avatar billede martinlind Nybegynder
28. april 2014 - 15:22 #1
Har du prøvet at bruge den indbyggede sort der er på en stringlist ( som dine items ligger i ) ?

ellers kan du afhængig af din delphi version også lave din egen compare func. i listen, så dens indbyggede sort gør som du vil, kig i delphi doc/google jeg har ikke delphi kørende nu :-)
Avatar billede fedtoere Praktikant
28. april 2014 - 17:01 #2
Den indbyggede sort virker fint - når jeg befinder mig i "windows miljø". Men når jeg kører på min NAS - så kan jeg ikke få den indbyggede sortering til at virke.
Derfor har jeg lavet min egen.

Jeg benytter en gammel version af delphi - ver 7

Jeg har forsøgt mig med at google for dette - dog indtil videre uden held.
Avatar billede martinlind Nybegynder
28. april 2014 - 23:20 #3
d7 og linux ? er det lazarus du bruger til linux ? det er nok nemmest at lave en qsort i stedet for bublesort
eller
bare bruge sort fra tstringlist evt TStringList(mylistbox.items).sort

ref :
http://lazarus-ccr.sourceforge.net/docs/rtl/classes/tstringlist.sort.html
Avatar billede fedtoere Praktikant
28. april 2014 - 23:51 #4
Linux - er måske overdrevet.
Men jeg bruger det på en windows 7 pc - som så bruger en NAS - Synology (der benytter linux).
Bruger jeg en windows explorer/stifinder så virker sortering fint, ligeledes når jeg bruger mit NAS administrator program.
Men når jeg tilgår via Delphi program - så er sorteringen ikke ok, og jeg kan ikke benytte sortering delphi tilbyder til listbox'en.

Jeg skal lige se mere på dine forslag - men det bliver først tidligst i morgen. Tak for input :-)
Avatar billede fedtoere Praktikant
01. maj 2014 - 16:04 #5
Martin - hvis du giver et svar så giver jeg dig point.

Det viste sig at jeg havde lavet noget af en brøler - jeg kunne nemlig se i min log/trace fil at jeg kaldte sorteringen for hver ListBox flere gange - hvilket jo på ingen måde gjorde mit program hurtigere :-)

Efter at have rettet mit program med sorteringskald og lidt andet, så kan jeg leve med hastigheden - som er reduceret til ca 10 %.

Og jeg har endda endnu ikke prøvet at skifte min sortering ud til en Quick-sort.
Avatar billede martinlind Nybegynder
01. maj 2014 - 16:20 #6
hehe... :-)
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

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