Avatar billede robson Nybegynder
06. januar 2004 - 12:33 Der 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??
Avatar billede robson Nybegynder
06. januar 2004 - 12:37 #1
ups... det skulle være
...
strTemp = strTemp & "<tr><td>tekst</td></tr>"
...
Avatar billede eagleeye Praktikant
06. januar 2004 - 12:55 #2
Løsningen er:

for i = 0 to 10
  Response.write "<tr><td>tekst</td></tr>"
next

Max længden for en streng: String Contains a variable-length string that can be up to approximately 2 billion characters in length.
Avatar billede robson Nybegynder
06. januar 2004 - 13:00 #3
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

...og strTemp sættes ind i en større sammenhæng
Avatar billede eagleeye Praktikant
06. januar 2004 - 13:05 #4
hmm ok, men så mit gæt Session.Timeout men det skriver du ikke virker..
Avatar billede robson Nybegynder
06. januar 2004 - 13:09 #5
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 :(
Avatar billede eagleeye Praktikant
06. januar 2004 - 13:16 #6
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..
Avatar billede robson Nybegynder
06. januar 2004 - 14:23 #7
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"
--------------------------

det er jo ret interessant  :o)
Avatar billede robson Nybegynder
06. januar 2004 - 15:08 #8
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!
Avatar billede robson Nybegynder
06. januar 2004 - 15:29 #9
AHAAHHHHAAA...
Det viser sig at jeg i min streng opbygning har benyttet en Session variabel, altså noget i stil med...

for i = 0 to 6000
  strTemp = strTemp & Session("minVariabel") & "NOGET ANDET TEKST..."
next

hvis jeg laver følgende ændring...

strSession = Session("minVariabel")
for i = 0 to 6000
  strTemp = strTemp & strSession & "NOGET ANDET TEKST..."
next

... så forbedres afviklingstiden BETYDELIGT. Og det er jo dejligt ;)
Avatar billede eagleeye Praktikant
06. januar 2004 - 15:35 #10
ok ;)
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
Kurser inden for grundlæggende programmering

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