---
title: "Lite små tester ....."
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/9866-lite-små-tester"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "PatrikB"
published: "2001-06-03T12:42:00.000Z"
updated: "2001-06-04T11:58:00.000Z"
replies: 20
views: 1855
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/9866-lite-små-tester"
---

# Lite små tester .....

_Sida 1 av 2._

## #1 — PatrikB, 2001-06-03T12:42Z

Sökte lite här på forumet och hittade att många förespråkar detta och påstår att det går "snabbare":

```
Set objRS = objConn.Execute(strSQL)
Do Until objRS.EOF
strNamn = objRS("namn")
strText = objRS("body")
strOP = strOP & strNamn & "<BR>" & strText & "<BR><BR>"
objRS.MoveNext
Loop
Set objRS = Nothing

Response.Write strOP
```

Alltså, att lägga allt som kommer från recordsetet i en variabel och sedan skriva ut variabeln.

Den här koden skriver ut posterna direkt med Response.Write istället för att lägga posterna i en variabel:

```
Set objRS = objConn.Execute(strSQL)
Do Until objRS.EOF
strNamn = objRS("namn")
strText = objRS("body")
Response.Write strNamn & "<BR>" & strText & "<BR><BR>"
objRS.MoveNext
Loop
Set objRS = Nothing
```

he, he ... det visar sig att den senare varianten är något snabbare med mindre processor tid än den första.
OK, inga stora skillnader ... bara typ ett par millisekunder, men den är ändå snabbare \*ler\*

Kollar man sedan in hur man hämtar recordsetet på för vis så är skillnaderna riktigt intressanta.

Med ADODB.Recordset som utgångspunkt så får man att:

recordset skapat genom Connection (i.e: Set objRS = objConn.Execute(strSQL)) objektet är ca 13% snabbare än genom ADODB.Recordset
och getRows() metoden är ca 40 % snabbare än genom ADODB.Recordset.

OBS!! öppnade ADODB.recordset på detta viset:

```
objRS.Open strSQL, objConn
```

alltså med default värdena.

Vad blir kontentan av dessa uppgifter?
Jo, gör hämtningarna med .GetRows() metoden och loopa sedan igenom arrayen.
Som sagt, att loopa genom en array eller ett recordset spelar ju ingen roll. Det är fortfarande en loopning det är frågan om.

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/9866

## #2 — nakoz, 2001-06-03T13:00Z

intressanta tester PatrikB, får jag fråga hur dessa är genomförda? :)

mvh.

Permalänk: https://www.webforum.nu/p/270868

## #3 — PatrikB, 2001-06-03T13:25Z

hello,

visst får du det .... fast de är bara ca uppgifter. Finns mycket bättre sätt att testa. Men, tycker ändå att dessa är relativt korrekta. Använder man Webstress tools från MS så får man mycket bättre uppgifter.

Dessa uppgifter är gjorda med en enkle javascript funktion som hämtar en timestamp så att säga.

koden för timestamp:

```
<SCRIPT LANGUAGE=JScript RUNAT=Server>

function getMilliSec()   {
   var d = new Date();
      return d.getTime()
                  }
</script>
```

Sedan gjorde jag en timestamp för start tiden precis innan jag initierade recordsetet och en timestamp för slut tiden när jag satt objRS = Nothing.
Exempel:

```
		dteStartTime1 = getMilliSec()
		
				strSQL = "SELECT Id, namn, [datum] FROM gastbok"
				Set objRS = objConn.Execute(strSQL)
					If objRS.EOF Then
					
					Else
						Do Until objRS.EOF
							strNamn = objRS(1)
							dteDatum = objRS(2)
							Response.Write strNamn & ", " & dteDatum & "<BR>"
							objRS.MoveNext
						Loop
					End If
					objRS.Close
				Set objRS = Nothing

		dteEndTime1 = getMilliSec()

Response.Write (dteEndTime1 - dteStartTime1) & " ms."
```

Dessa tester jag utförde var mot en Access db med endast 25 poster i.
Gjorde precis liknande tester mot en annan db med ca 700 poster i och då vart skillnaderna mellan ADODB.Recordset hämtningen och hämtningen med Connection objectet endast 4% i skillnad och hör och häpna, .GetRows() metoden var hela ca 2,5 ggr snabbare än de andra metoderna.

OK, inte de perfektaste testresultaten, men man får en ganska snabb idee om vart exekveringstiden tar vägen med de olika metoderna :p

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/270869

## #4 — LilleSkutt, 2001-06-03T17:08Z

Hallå!
Intressanta testar må jag säga, men jag har en lite undran... Hur använder man GetRows? Aldrig kommit i kontakt med den innan!

Permalänk: https://www.webforum.nu/p/270870

## #5 — webzonen, 2001-06-03T18:22Z

kul att nån gör lite tester, fortsätt att jämnföra, typ ASP vs PHP :)

Permalänk: https://www.webforum.nu/p/270871

## #6 — PatrikB, 2001-06-03T19:00Z

tyvärr kan jag inte själv göra dessa tester, mellan PHP och ASP då jag inte har ngn maskin som kör PHP och att jag ej kan PHP :(

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/270872

## #7 — Vide, 2001-06-03T19:01Z

Hmm... man kanske skall göra ett test mellan ASP och ASP.NET... :e

Permalänk: https://www.webforum.nu/p/270873

## #8 — PatrikB, 2001-06-03T19:09Z

.... det tycker jag ....

\=O)

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/270874

## #9 — PatrikB, 2001-06-03T19:11Z

Förresten,
en intressant sak.
Lägger man till någonform av Paging så är det, hör och häpna, ADODB.Recordset som vinner. ca 20 % snabbare än om man använder sig av ngn annan typ av paging genom conn objektet, om man vill ha enpagebar som ser ut så här:
\<\< Föregående &#0124; 1 2 3 4 5 &#0124; Nästa \>\>

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/270875

## #10 — LilleSkutt, 2001-06-03T19:47Z

Ingen som ville förklara? :(

Permalänk: https://www.webforum.nu/p/270876

## #11 — Vide, 2001-06-03T19:54Z

Det är PatrikB som experten här, så han får förklara... :)

Men jag kan fortsätta testerna med detta...

Senario:
Jag vill hämta fältet "test" ur en tabell och lista dessa i en tabell.

Jag använde två olika metoder: En loop för att lägga allt i en variabel, och ADO-funktionen GetString för att lägga allt i en variabel.

Skillnaden var fantastisk... :)

Loop: 3.0 Sekunder
GetString: 0.1 Sekunder

Ganska fet skillnad om jag får säga mitt...

Återkommer när jag testat GetRows med GetString. Självklart har dom inte samma användningsområden, men ändå.

Permalänk: https://www.webforum.nu/p/270877

## #12 — Vide, 2001-06-03T20:08Z

Jahapp... Resultaten:

```
GetString: 0,09
Loop: 3,07
GetRows: 2,82

GetString: 0,1
Loop: 3,02
GetRows: 2,86

GetString: 0,1
Loop: 3,03
GetRows: 2,82
```

Jag låter dom tala för sig själv... :)

Såhär gjorde jag testet:

Alla metoderna använder samma SQL-sträng och Connectionobjekt.

GetString:

```
' Startar GetString
intStart = Timer()
Set rs = ConnObj.Execute(strSQL)
strTable1 = "<table><tr><td>" & rs.GetString(,,"</td><td>", "</td></tr><tr><td>", "&nbsp;") & "</td></tr></table>"
intGetString = Timer() - intStart
```

Loop:

```
' Startar Loop
intStart2 = Timer()
Set rs = ConnObj.Execute(strSQL)
strTable2 = "<table>"
Do until rs.EOF
	strTable2 = strTable2 & "<tr><td>"&rs("ip")&"</td></tr>"
	rs.MoveNext
Loop
strTable2 = strTable2 & "</table>"
intLoop = Timer() - intStart2
```

GetRows:

```
' Startar GetRows
intStart3 = Timer()
Set rs = ConnObj.Execute(strSQL)
arrRows = rs.GetRows()
strTable3 = "<table>"
For i = 0 To Ubound(arrRows,2)
	strTable3 = strTable3 & "<tr><td>"&arrRows(0,i)&"</td></tr>"
Next
strTable3 = strTable3 & "</table>"
intGetRows = Timer() - intStart3
```

Eller var detta orättvist kodat?

Permalänk: https://www.webforum.nu/p/270878

## #13 — PatrikB, 2001-06-03T20:12Z

jo, det var intressanta resultat.
FAst som sagt ... getString har ju en MYCKET begränsat användningsområde.
Bra att använda vid enkel tabell struktur tex.

En annan intressant sak är hur många poster som hämtas. skillnaderna är mycket stora vid större posthanteringar.

cya,
PatrikB ... som inte är expert på detta ... ännu :p

Permalänk: https://www.webforum.nu/p/270879

## #14 — PatrikB, 2001-06-03T20:15Z

Vide ..

provade du att använda Response.Write oxå istället för att bygga på en variabel som sedan printas ut?
Den går faktiskt ngt fortare ... ;p ... fast inte fortare än getString(), men de 2 andra alternativen du använt.

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/270880

## #15 — LilleSkutt, 2001-06-03T20:26Z

Ok, putte kanske inte vill förklara för mig bara ;)

Har jag fattat det rätt om det är så här:
Tabell test
id &#0124; namn &#0124; epost

```
SQL = "SELECT * FROM test ORDER BY namn ASC"
set rs = connection.Execute(SQL)
arr = rs.GetRows()

for i = 0 to ubound(arr)
response.write "Namn: " & arr(1, i) & "E-post: " & arr(2, i)
response.write "<br>"
next
```

Rätt?

Permalänk: https://www.webforum.nu/p/270881

## #16 — Vide, 2001-06-03T20:36Z

Nästan rätt... du måste ange vilken dimension du skall använda i Ubound:

```
SQL = "SELECT * FROM test ORDER BY namn ASC"
set rs = connection.Execute(SQL)
arr = rs.GetRows()
for i = 0 to ubound(arr,2)
response.write "Namn: " & arr(1, i) & "E-post: " & arr(2, i)
response.write "<br>"
next
```

Permalänk: https://www.webforum.nu/p/270882

## #17 — Vide, 2001-06-03T20:38Z

> provade du att använda Response.Write oxå istället för att bygga på en variabel som sedan printas ut?

Nope, jag är så van att inte blanda funktionskod med presentations kod. Och i detta test så skrev jag inte ut någonting... jag lade dem bara i variabler... Men visst det skall jag testa...

\*testing\*

Permalänk: https://www.webforum.nu/p/270883

## #18 — Vide, 2001-06-03T20:48Z

Okej, med response i  alla exempel blev resultatet såhär:

```
GetString: 0,12
Loop: 0,28
GetRows: 0,1

GetString: 0,1
Loop: 0,25
GetRows: 0,1

GetString: 0,1
Loop: 0,22
GetRows: 0,1
```

Antalet poster var 1308 stycken.

Här ser vi att GetRows och GetString är lika snabba i testet. Det är alltså inte ADO som är seg utan VBScriptens loop vid tilldelning av variabler.

Intressant.

Slutledning: använd GetString när det går och GetRows när du inte kan använda GetString...

Det är kul med tester... :)

Permalänk: https://www.webforum.nu/p/270884

## #19 — PatrikB, 2001-06-03T21:01Z

visst är det ql med tester \*ler\*

LilleSkutt:
Sorry, missade ditt inlägg .... :(

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/270885

## #20 — Toonster, 2001-06-04T10:59Z

Vide-\>
' Startar GetString
Set rs = ConnObj.Execute(strSQL)
intStart = Timer()
strTable1 = "\<table\>\<tr\>\<td\>" & rs.GetString(,,"\</td\>\<td\>", "\</td\>\</tr\>\<tr\>\<td\>", " ") & "\</td\>\</tr\>\</table\>"
intGetString = Timer() - intStart

Om du flyttar ner intStart initieringen efter databasexekveringen, så får du ett bättre mätvärde, om det är åtkomsttiden man ska mäta.
Databasexekveringen kan ta olika tider, beroende på systemet. Det har jag själv råkat ut för.
Sedan bör (SKA) man använda en komponent för tidtagningen, eftersom scriptet i sig inte ger en korrekt tid, det är bättre att låta en separat komponent använda systemklockan. (nu kanske det är så du gjort iof)

/T

Permalänk: https://www.webforum.nu/p/270886

---

Tråden på webben: https://www.webforum.nu/amne/asp/9866-lite-små-tester  
Nästa sida: https://www.webforum.nu/amne/asp/9866-lite-små-tester/page2.md
