06. januar 2004 - 12:33Der er
9 kommentarer og 1 løsning
max længde på streng variabel?
Jeg bygger en html kode op vha en for-next løkke (se eks. herunder), hvilket virker fint...
for i = 0 to 10 strTemp = strTemp "<tr><td>tekst</td></tr>" next Response.write strTemp
det skal lige siges at dette er et forenklet eksempel, men problemstillingen er den samme.
Problemet opstår når for løkken kommer op på fx. 500. Dette får scriptet til at lave en timeout... og nej, løsningen er ikke at sætte Session.Timeout op !!!
Jeg kan ikke finde nogle oplysninger om hvor lang en streng jeg kan opbygge - altså er der fx et max antal tegn?? Er der nogen der er stødt på et lignende problem og hvordan blev det evt. løst??
OK - sagen er faktisk at jeg arbejder i en funktion så eksemplet lige skal udvides lidt... Function Test(tal) for i = 0 to tal strTemp = strTemp "<tr><td>tekst</td></tr>" next test = strTemp End Function
Session.Timeout virker, men det går ikke at lade brugeren sidde og vente i flere minutter på at scriptet har samlet strengen færdig og returneret resultatet. Jeg undre mig over at siden bliver så langsom pga denne funktion :(
Det er fordi jo flere ting du flytter ind i strTemp jo mere skal den kopier rundt. Når man skriver:
strTemp = strTemp & "<tr><td>tekst</td></tr>"
Sker der i virkeligheden dette noget i stil med dette: A = strTemp strTemp = A&"<tr><td>tekst</td></tr>"
Så indholdet af strTemp bliver flyttet to gange. Eller noget der svare til det hvis den skal finden enden på strTemp og tilføje mere data. Jeg ved ikke helt presist hvad compileren gør så det kun gætværk..
OK - jeg tror at jeg selv har løsningen... jeg har lavet nedenstående test hvor jeg benytter arrays til at holde på variablen i stedet... jeg har sat en timer på for at se hastigheds forskellen
--------------------------------- StartTid = Timer Function samlstring() Dim strTemp Dim arrEt(2) Dim arrTo(6000)
For i = 0 To 6000 arrEt(0) = i & " - 1 - " arrEt(1) = i & " - 2 - " arrEt(2) = i & " - 3<br>"
strTemp = join(arrEt)
arrTo(i) = strTemp Next strTemp = join(arrTo) Response.Write strTemp End Function
call samlstring
SlutTid = Timer tid = Round(SlutTid-StartTid,5) Response.write "Processtid: " & tid & " sekunder"
-------------------------------- dette script afvikles med en ca. tid på 0,1 sekund mens nedenstående kode afvikles med en ca. tid på 1,75 sekunder -------------------------------- StartTid = Timer Function samlstring() Dim strTemp
For i = 0 To 6000 strTemp = strTemp & i & " - <br>" Next Response.Write strTemp End Function
call samlstring
SlutTid = Timer tid = Round(SlutTid-StartTid,5) Response.write "Processtid: " & tid & " sekunder" --------------------------
hmmm... det virker, men svartiden er stadig for høj og scriptet skal derfor lige optimeres lidt mere :o) Jeg lukker spørgsmålet, tak for deltagelsen eagleeye!
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.