Avatar billede stigc Nybegynder
08. januar 2002 - 22:51 Der er 17 kommentarer og
1 løsning

Langsomme streng behandling

ASP er meget langsommme med sine strenge. Kan man ikke angive et start størrelse på en streg (f.eks 4096 tegn) så den ikke hele tiden skal udvide den, hver gang man lægger en anden streng oven i?
Avatar billede tmceu Praktikant
08. januar 2002 - 23:14 #1
Svaret er meget kort nej. VBScript har kun én datatype variant (god med subtyper). Når indholdet er tekst opfatter VBScript subtypen som text automatisk og så er det altid en variabel længde størrelse.

Det er muligvis anderledes med ASP skrevet i JScript, men det kender jeg ikke alverden til :-)
Avatar billede stigc Nybegynder
08. januar 2002 - 23:17 #2
Er der så nogen der har en ide om hvordan man forbedre preformance på et loop der samler en stor streng?
Avatar billede cyb Nybegynder
08. januar 2002 - 23:19 #3
Læg det i et com objekt - det giver ekstra hastighed. Her kan du evt. skrive objektet i c++ hvis du virkeligt skal have hastighed.
Avatar billede stigc Nybegynder
08. januar 2002 - 23:21 #4
har ikke mulighed for COM objekter.
Kan man ikke lave en buffer i ASP ?
Avatar billede stigc Nybegynder
08. januar 2002 - 23:22 #5
som så kan lægges over i en streng
Avatar billede tmceu Praktikant
08. januar 2002 - 23:31 #6
Sikke en omgang vrøvl jeg fik skrevet. \"god med subtyper\" skulle have været \"godt nok med subtyper\" :-)

Jeg har aldrig set en stringbuffer som man kender dem fra eks. JAVA. Den eneste buffer jeg kender til, er den fra response objektet og den tror jeg ikke hjælper meget.
Avatar billede stigc Nybegynder
08. januar 2002 - 23:34 #7
næ det tror jeg heller ikke....
Avatar billede tmceu Praktikant
08. januar 2002 - 23:35 #8
Hvad er det præcist du foretager dig og hvad er din defination af \"langsom\" ? snakker vi om at du vil optimere et par fladbankede nanosekunder eller ?
Avatar billede stigc Nybegynder
09. januar 2002 - 00:01 #9
nej flere sekunder. looper ca. 200 gange og lave 10-15 concatineringer i hvert loop, og det kører meget langsomt på min computer. 350 mhz
Avatar billede tmceu Praktikant
09. januar 2002 - 00:04 #10
Lyder som om memory er den eneste mulighed tilbage at optimere på. Hvor meget kører du med, hviken server/version og hvad kører ellers på maskinen ?
Avatar billede stigc Nybegynder
09. januar 2002 - 00:06 #11
tror lige jeg tester det inden vi kører videre ikke?
Det bliver ikke lige i dag.....

Avatar billede tmceu Praktikant
09. januar 2002 - 00:09 #12
Der fik jeg dig :-)
Avatar billede stigc Nybegynder
11. januar 2002 - 01:00 #13
øhh fik mig hvor ?

Her en test i kan køre på jeres computer. Jo større strengen bliver jon langsommer bliver den....


<script language=\"JScript\" runat=\"Server\">
timerBegin = new Date();
function myTimer() {
    tmpTime = new Date();
    Response.Write(\"<br>\" + (tmpTime.getTime() - timerBegin.getTime()))
}
</script>


<%


for i=0 to 200

Call myTimer()
Response.Write \" ms.</b> at afvikle dette script.</p>\"

    temp=temp & \"Ladfgå ksdføghksdæøfh sødfæh sfæødhl øsdæfh sødæfh sødfælhk dæøfhk dfhKj\"
    temp=temp & \"Ladfgå ksdføghksdæøfh sødfæh sfæødhl øsdæfh sødæfh sødfælhk dæøfhk dfhKj\"
    temp=temp & \"Ladfgå ksdføghksdæøfh sødfæh sfæødhl øsdæfh sødæfh sødfælhk dæøfhk dfhKj\"
    temp=temp & \"Ladfgå ksdføghksdæøfh sødfæh sfæødhl øsdæfh sødæfh sødfælhk dæøfhk dfhKj\"
    temp=temp & \"Ladfgå ksdføghksdæøfh sødfæh sfæødhl øsdæfh sødæfh sødfælhk dæøfhk dfhKj\"
    temp=temp & \"Ladfgå ksdføghksdæøfh sødfæh sfæødhl øsdæfh sødæfh sødfælhk dæøfhk dfhKj\"
    temp=temp & \"Ladfgå ksdføghksdæøfh sødfæh sfæødhl øsdæfh sødæfh sødfælhk dæøfhk dfhKj\"
    temp=temp & \"Ladfgå ksdføghksdæøfh sødfæh sfæødhl øsdæfh sødæfh sødfælhk dæøfhk dfhKj\"
    temp=temp & \"Ladfgå ksdføghksdæøfh sødfæh sfæødhl øsdæfh sødæfh sødfælhk dæøfhk dfhKj\"
    temp=temp & \"Ladfgå ksdføghksdæøfh sødfæh sfæødhl øsdæfh sødæfh sødfælhk dæøfhk dfhKj\"

   
next

%>
Avatar billede stigc Nybegynder
11. januar 2002 - 01:03 #14
Avatar billede stigc Nybegynder
11. januar 2002 - 01:05 #15
her er en ny test:

<script language=\"JScript\" runat=\"Server\">
timerBegin = new Date();
function myTimer() {
    tmpTime = new Date();
    Response.Write(\"<br>\" + (tmpTime.getTime() - timerBegin.getTime()))
}
</script>

<%


\' Use this class to concatenate strings in a much more
\' efficient manner than simply concatenating a string
\' (strVariable = strVariable & \"your new string\")
Class StringBuilder
    Dim arr     \'the array of strings to concatenate
    Dim growthRate  \'the rate at which the array grows
    Dim itemCount  \'the number of items in the array

    Private Sub Class_Initialize()
        growthRate = 50
        itemCount = 0
        ReDim arr(growthRate)
    End Sub

    \'Append a new string to the end of the array. If the
    \'number of items in the array is larger than the
    \'actual capacity of the array, then \"grow\" the array
    \'by ReDimming it.
    Public Sub Append(ByVal strValue)
        If itemCount > UBound(arr) Then
            ReDim Preserve arr(UBound(arr) + growthRate)
        End If

        arr(itemCount) = strValue
        itemCount = itemCount + 1
    End Sub

    \'Concatenate the strings by simply joining your array
    \'of strings and adding no separator between elements.
    Public Function ToString()
        ToString = Join(arr, \"\")
    End Function
End Class


Dim objBuilder, i
Set objBuilder = new StringBuilder

For i = 0 To 500
Call myTimer()
Response.Write \" ms.</b> at afvikle dette script.</p>\"

    objBuilder.Append(\"dasrg lksdfghæ kdføh ksdøfh sdøæfh øsdæfh sødæfh sdæøfh dfæøh \")
    objBuilder.Append(\"dasrg lksdfghæ kdføh ksdøfh sdøæfh øsdæfh sødæfh sdæøfh dfæøh \")
    objBuilder.Append(\"dasrg lksdfghæ kdføh ksdøfh sdøæfh øsdæfh sødæfh sdæøfh dfæøh \")
    objBuilder.Append(\"dasrg lksdfghæ kdføh ksdøfh sdøæfh øsdæfh sødæfh sdæøfh dfæøh \")
    objBuilder.Append(\"dasrg lksdfghæ kdføh ksdøfh sdøæfh øsdæfh sødæfh sdæøfh dfæøh \")
    objBuilder.Append(\"dasrg lksdfghæ kdføh ksdøfh sdøæfh øsdæfh sødæfh sdæøfh dfæøh \")
    objBuilder.Append(\"dasrg lksdfghæ kdføh ksdøfh sdøæfh øsdæfh sødæfh sdæøfh dfæøh \")
    objBuilder.Append(\"dasrg lksdfghæ kdføh ksdøfh sdøæfh øsdæfh sødæfh sdæøfh dfæøh \")
    objBuilder.Append(\"dasrg lksdfghæ kdføh ksdøfh sdøæfh øsdæfh sødæfh sdæøfh dfæøh \")
    objBuilder.Append(\"dasrg lksdfghæ kdføh ksdøfh sdøæfh øsdæfh sødæfh sdæøfh dfæøh \")
    objBuilder.Append(\"dasrg lksdfghæ kdføh ksdøfh sdøæfh øsdæfh sødæfh sdæøfh dfæøh \")
    objBuilder.Append(\"dasrg lksdfghæ kdføh ksdøfh sdøæfh øsdæfh sødæfh sdæøfh dfæøh \")
    objBuilder.Append(\"dasrg lksdfghæ kdføh ksdøfh sdøæfh øsdæfh sødæfh sdæøfh dfæøh \")
Next

Response.Write objBuilder.ToString()

%>
Avatar billede tmceu Praktikant
11. januar 2002 - 07:08 #16
Jeg mente bare at jeg fik dig kørt træt for den dag :-)

Jeg har desværre ingen erfaring med om din seneste løsning holder.
Avatar billede stigc Nybegynder
11. januar 2002 - 13:18 #17
den er meget hurtigere....
Min kode der tog 8-10 sekunder tager nu omkring 1/2 sekund.
Avatar billede stigc Nybegynder
11. januar 2002 - 13:20 #18
så jeg accepterer min egne løsning :)
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