Avatar billede brownghost Nybegynder
27. maj 2007 - 22:33 Der er 6 kommentarer og
1 løsning

array der lister kategorier sløver siden helt vildt..

Hjælp, vi har en funktion på vores shop der sløver serveren helt vildt.

Nu flere kategorier, med under kategorier der er, nu langsomer køre siden.

Serveren er stor, has massere ram og CPU.
det er testet på flere maskiner.

Alle reagere på samme måde. Nu flere kategorier, med under kategorier, nu langsom'er bliver den :(

er der nogle der har en ide om hvad der går galt. er det dem måde koden er lavet på?
kunne det lavet om ? rettes ??
------ Her er koden 2 funktioner Front end side --------

Function ListCategories(arrCats, lngParentCategoryID, lngSelectedID, strIndent)
  Dim A, strTemp, lngUBound, strClass, thisCat
  arrCats2 = GetCats()
  lngUBound = UBound(arrCats2, 2)
  For A = 0 To lngUBound
      If arrCats2(1, A) = lngParentCategoryID Then
        If lngExpandedCategoryID = arrCats2(0,A) Then
            strClass = "selectedCategory"
            strBullet = "<img src='/images/arrow_right.gif' style='border-width:0px;'>"
        Else
            strClass = "menuitem"
            strBullet = ""
        End If

        strTemp = strTemp & strIndent & IIf(True Or arrCats2(4, A), "<a title=""" & arrCats2(2, A) & """ href=""/shop/category.asp?id=" & arrCats2(0, A) & """ class='" & strClass & "'>", "") & strBullet & " " & IIf(lngParentCategoryID = 0, "<b>", "") & arrCats2(2, A) & IIf(lngParentCategoryID = 0, "</b>", "")  & IIf(True Or arrCats2(4, A), "</a>", "")
        strTemp = strTemp & "<br>"
        If InStr(strExpandedCats, "|" & arrCats2(0, A) & "|") > 0 Then
            strTemp = strTemp & ListCategories(arrCats2, arrCats2(0, A), lngSelectedID, strIndent & "&nbsp;&nbsp;&nbsp;")
        End If
      End If
  Next
  ListCategories = strTemp
End Function

--------- End front end -------
Avatar billede erikjacobsen Ekspert
27. maj 2007 - 22:42 #1
Hvor tit ændrer kategorierne sig? Hvis det ikke er så tit, så er der jo ingen grund til at beregne dem hver gang side vises (hvis jeg forstår problemstillingen korrekt). Lav en fast streng een gang for alle, de få gange der rettes i kategorier - så kan det være ligemeget hvor lang tid det tager.
Avatar billede brownghost Nybegynder
27. maj 2007 - 22:56 #2
ups glemte at får noget med oven over det er det der Expand kats..


arrCatsTemp = GetCats()
Sub ExpandCats(lngCategoryID)
    Dim A, strTemp, lngUBound
    arrCats1 = arrCatsTemp
    lngUBound = UBound(arrCatsTemp, 2)
    For A = 0 To lngUBound
        If arrCats1(0, A) = lngCategoryID Then
            strExpandedCats = strExpandedCats & lngCategoryID & "|"
            ExpandCats arrCats1(1, A)       
        End If
    Next
End Sub

Function ListCategories(arrCats, lngParentCategoryID, lngSelectedID, strIndent)
  Dim A, strTemp, lngUBound, strClass, thisCat
  arrCats2 = GetCats()
  lngUBound = UBound(arrCats2, 2)
  For A = 0 To lngUBound
      If arrCats2(1, A) = lngParentCategoryID Then
        If lngExpandedCategoryID = arrCats2(0,A) Then
            strClass = "selectedCategory"
            strBullet = "<img src='/images/arrow_right.gif' style='border-width:0px;'>"
        Else
            strClass = "menuitem"
            strBullet = ""
        End If

        strTemp = strTemp & strIndent & IIf(True Or arrCats2(4, A), "<a title=""" & arrCats2(2, A) & """ href=""/shop/category.asp?id=" & arrCats2(0, A) & """ class='" & strClass & "'>", "") & strBullet & " " & IIf(lngParentCategoryID = 0, "<b>", "") & arrCats2(2, A) & IIf(lngParentCategoryID = 0, "</b>", "")  & IIf(True Or arrCats2(4, A), "</a>", "")
        strTemp = strTemp & "<br>"
        If InStr(strExpandedCats, "|" & arrCats2(0, A) & "|") > 0 Then
            strTemp = strTemp & ListCategories(arrCats2, arrCats2(0, A), lngSelectedID, strIndent & "&nbsp;&nbsp;&nbsp;")
        End If
      End If
  Next
  ListCategories = strTemp
End Function
Avatar billede kjulius Novice
28. maj 2007 - 14:40 #3
Jeg tror du må erkende, at dit koncept er forfejlet. Normalt siger man jo, at RAM er meget hurtigere end hardisken. Men at bruge en array til at søge sekventielt i, vil altid være langsommere end at bruge en databaseforespørgsel (i hvert fald så snart man overskrider en vis (meget lille) størrelse). En database kan jo bruge et index under sin søgning, og selv hvis databasen bruger sekventiel søgning vil den have adgang til kode-optimeringsrutiner, du slet ikke har hvis du bruger en "hjemmelavet" sekventiel søgefunktion i en array.

Personligt ville jeg omskrive det hele og basere søgningen på SQL forespørgsler. Det vil give en meget bedre performance.

Hvis du ikke ønsker at gøre det, og data i dit array er i sorteret rækkefølge, kan du måske opnå en mærkbar hastighedsforøgelse ved at bruge en binær søgning. I stedet for bevidstløst at søge fra start til slut, indtil du finder det rette tal, kunne du starte med at undersøge det midterste element. Hvis det er for stort ved du, at du kun skal søge længere oppe. Undersøg igen det midterste element i det område, det lå over det oprindeligt undersøgte element. På den måde kan du hurtigt skyde dig ind på det rigtige element. Dette gentages indtil det rette arrayelement er fundet.
Men som sagt, det virker kun, hvis elementerne ligger i en sorteret orden. Det bedste ville efter min mening stadig være, at bruge MS SQL Servers formidable kræfter til at lave søgningen.
Avatar billede brownghost Nybegynder
28. maj 2007 - 15:14 #4
Det vi har efter at have læst jeres 2 indlæg er at ligge det hele over i Application.
denne køres så kun hvis server bliver reboot, eller man opretter nye kat's.
på den måde har vi optimeret det.
sider der før tog op til 12 sec at loade, loader nu på under ½ sec. weeee

Så nu virker det optimalt :)
Tak for jeres svar og tid.
Skriv svar begge to, så give jeg point.
:)
Avatar billede erikjacobsen Ekspert
28. maj 2007 - 15:19 #5
Ingen point til mig, tak.
Avatar billede kjulius Novice
28. maj 2007 - 16:05 #6
Det er en meget fin forbedring af svartiden, må man sige. :-)
Avatar billede brownghost Nybegynder
28. maj 2007 - 20:38 #7
Jeps det gav så meget det der.
kan ikke mærke det på systemer med kun få kats
men er der mange kats og mange under kats + en server der måske køre 50% load, ja så er det helt uundværligt..
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
Computerworld tilbyder specialiserede kurser i database-management

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