istället för rs("antal") i en loop, och om detta är sjätte fältet i dbtabellen är det bättre(prestandamässigt) att skriva rs(5).
Const antal = 5
rs(antal)
eller ännu bättre sätta en referens till dbfältet:
dim objAntal
set objAntal = rs(antal) http://www.4guysfromrolla.com/webtech/120899-1.shtml
Jag genomförde lite tester, som iofs var med contextswitch utskrifter, och kom fram till att with gick på t ex: 1,3 sekunder och reponse.write direkt på 0,3 sekunder.
Utan att gå in på testet i detalj eller något annat. Men det verkade som att With alltid var väldigt mycket långsammare...
Det kan ju vara så att det i andra fall är snabbare. Jag har ju haft fel förr, så varför inte nu igen :)
Enklast är väl att testa, sätt en timer på sidan och se vad det tar, byt sen till utan with och kolla skillnaden.
Ett annat sätt att öka prestnadan är att ta sina sql satser och köra i t ex queryanalyzern och se om den kan komma med förslag på index, eller annat bra. Detta funkar dock dåligt i Access som jag ser att du använder nu när jag kollade efter. Men har man SQL server är det verkligen värt det extra jobbet. Det är bra att se till att man bara hämtar ut den data man behöver, dvs inte en select * om man bara skall ha ett fält. Att kanske köra en Join istället för and ditt = datt and dutt = plutt osv osv... Join är snabbare.
Här är ett exempel på ett enkelt prestanda test som testar tre olika typer av utskrifter mot skärm.
Metod 1 (context-switch) gav tiden: 0.291
Metod 2 (Response.Write) gav tiden: 0.311
Metod 3 (With Response) gav tiden: 1.553
Detta på en laptop med win2k, iis5, 512 i minne
Det är ju inte ett allmängiltigt test, men det verkar ge en viss pekpinne åt vad som är bäst... alla som jag känner som har kört testet får radiklat sämre tider för With Response metoden, och ungefär samma för de två andra.
<%
Option Explicit
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<%
Dim dInitTime, fPeriod, n
dInitTime = Timer
'--## Metod 1
For n = 1 To 500000
%>.<%
Next
fPeriod = FormatNumber(Timer - dInitTime, 3, True)
Response.Write "<br>Metod 1 (context-switch) gav tiden: "& fPeriod &"<br><br>"
dInitTime = Timer
'--## Metod 2
For n = 1 To 500000
Response.Write "."
Next
fPeriod = FormatNumber(Timer - dInitTime, 3, True)
Response.Write "<br>Metod 2 (Response.Write) gav tiden: "& fPeriod &"<br><br>"
dInitTime = Timer
'--## Metod 3
With Response
For n = 1 To 500000
.Write "."
Next
End With
fPeriod = FormatNumber(Timer - dInitTime, 3, True)
Response.Write "<br>Metod 3 (With Response) gav tiden: "& fPeriod &"<br><br>"
%>
</body>
</html>
japp.... visar ju att response.write ar snabbare. Jag har alltid anvant response.write och har inte hort om att kora with response skulle vara snabbare sa...
'--## Metod 1
For n = 1 To 5000
%>.
<%=Request.ServerVariables("SCRIPT_NAME")%>
<%
Next
fPeriod = FormatNumber(Timer - dInitTime, 3, True)
Response.Write "<br>Metod 1 (context-switch) gav tiden: "& fPeriod &"<br><br>"
dInitTime = Timer
'--## Metod 2
For n = 1 To 5000
Response.Write "." & Request.ServerVariables("SCRIPT_NAME")
Next
fPeriod = FormatNumber(Timer - dInitTime, 3, True)
Response.Write "<br>Metod 2 (Response.Write) gav tiden: "& fPeriod &"<br><br>"
dInitTime = Timer
'--## Metod 3
With Response
For n = 1 To 5000
.Write "." & Request.ServerVariables("SCRIPT_NAME")
Next
End With
och fick följande resultat under IIS4/NT4sp6
Metod 1 (context-switch) gav tiden: 1,688
Metod 2 (Response.Write) gav tiden: 1,203
Metod 3 (With Response) gav tiden: 1,172
Här är ett exempel på ett enkelt prestanda test som testar tre olika typer av utskrifter mot skärm.
Metod 1 (context-switch) gav tiden: 0.291
Metod 2 (Response.Write) gav tiden: 0.311
Metod 3 (With Response) gav tiden: 1.553
Detta på en laptop med win2k, iis5, 512 i minne
Det är ju inte ett allmängiltigt test, men det verkar ge en viss pekpinne åt vad som är bäst... alla som jag känner som har kört testet får radiklat sämre tider för With Response metoden, och ungefär samma för de två andra.
Jag har då aldrig haft behovet av att skriva ut 5 000 punkter efter varandra plus sökvägen så då är testet väldigt orealistiskt. Lägg till alla konkanteneringar som görs på "Response.Write" så ska du se att du får ett annat resultat.
Dessutom är det ganska lite resurser som går åt till att skriva ut data på detta viset. Snarare är det på sättet man hämtar data som är problemet, kanske man har databasen öppen samtidigt som man skriver ut det?
Jag körde alltid With Response för att det är lättare att läsa, om det visar sig 10 millisekunder slöare skiter jag i, då får jag väl cacha sidan istället.
r) Låt bli att skapa tre olika recordsets och håll dig till ett istället. Om du behöver skriva samma sak två gånger så har du också gjort fel (tänker på de två första SQL-satserna som är näst intill lika) - lägg i en funktion och retunera olika beroende på värdet istället.
Jag påstod inte att mitt test var allmängiltigt. Men det är intressant att man får väldigt olika resultat beroende på vad man gör, och hur man gör det.
Kan ju vara något att fundera på, så att man väljer rätt metod vid rätt tillfälle.
Om prestanda tvistar de lärda, de köpta och de okunnigna, så vi lär ju aldrig komma fram till rätt svar. :e
Det enda man kan göra är att time:a sin sida och sen försöka förbättra än det ena och än det andra och se om det hjälper. Prova sig fram helt enkelt.
Jag påstod inte att mitt test var allmängiltigt. Men det är intressant att man får väldigt olika resultat beroende på vad man gör, och hur man gör det.
Precis, så gör man inte. :e
Skämt åsido, jag förstår vad du menar.
263 ms totalt · 3 externa anrop · v20260731065814-full.767b4345