Avatar billede passiflora Juniormester
10. marts 2015 - 10:48 Der er 14 kommentarer og
1 løsning

Kan hastigheden i denne stump kode optimeres

Har brug for at kunne vise billeder i en mappe. Min kode køre sådan set fin, men da jeg har mange filer i mappen og ønsker at vise dem i alfabetisk rækkefølge opfattes den som sløv.

Kan man skrive dette smartere ...

  Dim myarray()
  For Each Image In objFiles
      If InStr(1,Image.Name,Searchtxt,1) then
    antbilled=antbilled+1
      End if
  Next
  reDim myarray(antbilled)
  For Each Image In objFiles
      If InStr(1,Image.Name,Searchtxt,1) then
        myarray(teller)=Image.Name
        teller=teller+1
      End if
  Next
  Set objFS = Nothing
  max=ubound(MyArray)
  For i=0 to max
      For j=i+1 to max
    if MyArray(i)>MyArray(j) then
          TemporalVariable=MyArray(i)
      MyArray(i)=MyArray(j)
      MyArray(j)=TemporalVariable
    end if
      next
  next

Tak
Avatar billede claes57 Ekspert
10. marts 2015 - 12:28 #1
kode fra http://www.4guysfromrolla.com/webtech/011001-1.shtml

  Dim myarray()
  For Each Image In objFiles
      If InStr(1,Image.Name,Searchtxt,1) then
        antbilled=antbilled+1
        myarray(teller)=Image.Name
        teller=teller+1
      End if
  Next
  reDim myarray(antbilled)
  Set objFS = Nothing
  SingleSorter( byRef myarray() )

og så et andet sted dette:
Sub SingleSorter( byRef arrArray )
    Dim row, j
    Dim StartingKeyValue, NewKeyValue, swap_pos

    For row = 0 To UBound( arrArray ) - 1
    'Take a snapshot of the first element
    'in the array because if there is a
    'smaller value elsewhere in the array
    'we'll need to do a swap.
        StartingKeyValue = arrArray ( row )
        NewKeyValue = arrArray ( row )
        swap_pos = row
           
        For j = row + 1 to UBound( arrArray )
        'Start inner loop.
            If arrArray ( j ) < NewKeyValue Then
            'This is now the lowest number -
            'remember it's position.
                swap_pos = j
                NewKeyValue = arrArray ( j )
            End If
        Next
       
        If swap_pos <> row Then
        'If we get here then we are about to do a swap
        'within the array.       
            arrArray ( swap_pos ) = StartingKeyValue
            arrArray ( row ) = NewKeyValue
        End If   
    Next
End Sub
Avatar billede passiflora Juniormester
10. marts 2015 - 12:51 #2
Tak ... tester lige senere ...
Avatar billede passiflora Juniormester
10. marts 2015 - 13:39 #3
Mangler der ikke loopet, hvor filnavnene faktisk bliver skrevet ned i tabellen. Jeg har genindsat dette

Jeg får en syntaxfejl ved byRef ...
Avatar billede claes57 Ekspert
10. marts 2015 - 14:42 #4
det er sidste linje i hovedrutinen
  SingleSorter( byRef myarray() )
den skal bare være
  SingleSorter( myarray() )
Avatar billede passiflora Juniormester
10. marts 2015 - 15:48 #5
Har flyttet lidt rundt og lagt ud ...
Spiller tror jeg, har ikke noget billede af hvor meget hurtigere ... men hurtigere ...

Tak ... vil du sende et svar ...
... tak for hjælpen ...
Avatar billede claes57 Ekspert
10. marts 2015 - 16:02 #6
bare luk selv. Det er jo de der 4guysfromrolla, der lavede sorteringesrutinen.
Avatar billede passiflora Juniormester
11. marts 2015 - 08:23 #7
Tak ...

Tænkte på ... ville det mon kunne køre hurtigere, hvis jeg brugte asp.net eller lagrede filnavnene i database ...

Er ikke helt i mål ...
Avatar billede claes57 Ekspert
11. marts 2015 - 08:39 #8
Hvis du løbende har gemt filnavn i database, så er det det hurtigste. Bare et kald, og du får navne ud sorteret klar til et lille loop til visning. Udtræk kan du have i et array så du lukker databasen med det samme.
Tror ikke, der er nogen forskel på asp og .net i hastighed.
Avatar billede passiflora Juniormester
11. marts 2015 - 09:04 #9
Jeg har intet gemt, men kunne lave et kronjob, der kørte hver nat ... der vil være flere der tilfører billeder til mappen ...
Avatar billede claes57 Ekspert
11. marts 2015 - 09:27 #10
du skal ind i rutinen, der uploader billeder, og der lige køre et kald til databaseopdatering når upload er gennemført. Og så lige lave en rutine, der opdaterer databasen med data indtil rutinen er på plads.
Så er data altid 100% præcise, og det ekstra kald ved upload vil ikke ændre mærkbart i performance.
Avatar billede passiflora Juniormester
11. marts 2015 - 09:34 #11
hmm ja ... det ville være smartest ...
... men vi bruger filezilla til upload ...
Avatar billede claes57 Ekspert
11. marts 2015 - 09:54 #12
hvis du opretter en gratis konto på http://internetseer.com/home/index.xtp
så kan du få denne til at tjekke en asp-side en gang i timen. Denne asp-side kunne så opdatere databasen. Det vil være det næsmeste jeg kan komme på en altid opdateret database.
Avatar billede passiflora Juniormester
11. marts 2015 - 10:11 #13
Jeg har adgang til cronjobs på serveren, hvor billederne ligge, og det vil nok være enklere ...
Men tak for internetseer.com

... og du vil stadig ikke have point ...
Avatar billede claes57 Ekspert
11. marts 2015 - 10:28 #14
Bare luk selv...
Avatar billede passiflora Juniormester
11. marts 2015 - 11:05 #15
Men tak så ...

Jeg satte lige filen til at vise tid for hvornår de enkelte dele startede, så jeg kunne se, hvor tiden blev brugt.
Det helt tydeligt, at det der tager tid er læsning af filnavne og ikke sorteringen - som jeg havde forventet ...

Tak for hjælp.
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