webForumDet fria alternativet

Paging, prestandajämförelse

ASP

3 svar · 272 visningar · startad av Johnsen

Medlem sedan juli 2000836 inlägg
Frågan#1

Bara för att kolla skapade jag två sidor på lite olika sätt.
Den ena går igenom ca 1700 poster på 3 sekunder,
medan den andra tar hela 8 sekunder på sig för samma sak.

Kan någon svara på vari prestandaskillnaden ligger?

Denna trodde jag skulle gå snabbast, men det gjorde den inte...

<%
Response.Write now() &"<br>"

Set Conn     = Server.CreateObject("ADODB.Connection")
Set Rec_show = Server.CreateObject("ADODB.Recordset")

	Conn.Open 	"Driver={SQL Server};" & _
			"Server=XXX.XXX.XX.X;" & _
			"Address=XXX.XXX.XX.X,1433;" & _
			"Network=DBMSSOCN;" & _
			"Database=Namn;" & _
			"Uid=userX;" & _
			"Pwd=XXXXXX;"

SQL_show = "SELECT INTEREFE, TULLID, REFNR1, UTLDAT FROM tutlin WHERE RECIROUTADDR='ROAD' ORDER BY UTLDAT DESC"
Rec_show.Open SQL_show, Conn, 3, 1

if Rec_show.eof Then
	response.write "Sökningen gav inga träffar!" 
Else

	Rec_show.PageSize	= 10
	antalPoster		= Rec_show.RecordCount
	antalSidor		= Rec_show.PageCount
	aktuellSida		= Request("sida")
	If aktuellSida = "" Then aktuellSida = 1
	Rec_show.AbsolutePage	= aktuellSida
	aktuellPost		= 0

	Response.Write "Funna poster: "& antalPoster &"<br>"

	Response.Write "Sida: "& aktuellSida &" av "& antalSidor &"<br>"

	If cint(aktuellSida) > 1 Then Response.Write "<a href=""default_page2.asp?sida="& aktuellSida-1 &"""> Föregående</a> | "

	If cint(aktuellSida) < antalSidor Then Response.Write "<a href=""default_page2.asp?sida="& aktuellSida+1 &"""> Nästa </a>"

	Response.Write "<hr>"

	do until Rec_show.eof or aktuellPost >= Rec_show.PageSize

		Response.Write Rec_show("INTEREFE") &"<br>"
		Response.Write Rec_show("TULLID")   &"<br>"
		Response.Write Rec_show("REFNR1")   &"<br>"
		Response.Write Rec_show("UTLDAT")   &"<hr>"

		aktuellPost = aktuellPost + 1
	Rec_show.movenext
	loop

End If

set Rec_show = nothing
Conn.Close
set Conn = nothing

Response.Write now() &"<br>"
%>

Denna utförde samma sak som den ovanstående, men dubbelt så snabbt...

<%
Response.Write now() &"<br>"

Set Conn = Server.CreateObject("ADODB.Connection")

	Conn.Open 	"Driver={SQL Server};" & _
			"Server=XXX.XXX.XX.X;" & _
			"Address=XXX.XXX.XX.X,1433;" & _
			"Network=DBMSSOCN;" & _
			"Database=Namn;" & _
			"Uid=userX;" & _
			"Pwd=XXXXXX;"

SQL_rakna = "SELECT COUNT(*) AS raknare FROM tutlin WHERE RECIROUTADDR='ROAD'"
set Rec_rakna = Conn.execute(SQL_rakna)

SQL_show = "SELECT INTEREFE, TULLID, REFNR1, UTLDAT FROM tutlin WHERE RECIROUTADDR='ROAD' ORDER BY UTLDAT DESC"
set Rec_show = Conn.execute(SQL_show)

if Rec_show.eof Then
	response.write "Sökningen gav inga träffar!" 
Else

	sidStorlek  = 10
	antalPoster = Rec_rakna("raknare")
	antalSidor  = Round((antalPoster / sidStorlek) + 0.499)
	aktuellSida = Request("sida")
	If aktuellSida = "" Then aktuellSida = 1
	startPost   = aktuellSida * sidStorlek - sidstorlek
	aktuellPost = 0

	Response.Write "Funna poster: "& antalPoster &"<br>"

	Response.Write "Sida: "& aktuellSida &" av "& antalSidor &"<br>"

	If cint(aktuellSida) > 1 Then Response.Write "<a href=""default_page.asp?sida="& aktuellSida-1 &"""> Föregående</a> | "

	If cint(aktuellSida) < antalSidor Then Response.Write "<a href=""default_page.asp?sida="& aktuellSida+1 &"""> Nästa </a>"

	Response.Write "<hr>"

	Rec_show.move startPost
	Do Until Rec_show.eof Or aktuellPost >= sidStorlek

		Response.Write Rec_show("INTEREFE") &"<br>"
		Response.Write Rec_show("TULLID")   &"<br>"
		Response.Write Rec_show("REFNR1")   &"<br>"
		Response.Write Rec_show("UTLDAT")   &"<hr>"

		aktuellPost = aktuellPost + 1
	Rec_show.movenext
	loop

End If

set Rec_show  = nothing
set Rec_rakna = nothing
Conn.Close
set Conn = nothing

Response.Write now() &"<br>"
%>
Medlem sedan aug. 20003 575 inlägg
#2

Det är klart du använder ju inte

Set Rec_show = Server.CreateObject("ADODB.Recordset")

vilket jag inte fattar varför det finns, jag använder det aldrig tycker att det förstör prestandan enormt att använda det

Medlem sedan mars 20002 836 inlägg
#3

Kanske skulle testa att ändra denna rad:

Rec_show.Open SQL_show, Conn, 3, 1

till:

Rec_show.Open SQL_show, Conn, 1, 3

borde gå ngt fortare ... men, inte lika fort kanske som det andra exemplet *ler*

cya,
PatrikB

Medlem sedan juli 2000836 inlägg
#4

Ok. Jag provade med att ändra som du sa, PatrikB, men det gav ingen märkbar förbättring.
Har jag fattat rätt om jag tror att:

Rec_show.Open SQL_show, Conn, 3, 1
ger en statisk kopia av Rec, där förändingar gjorda av andra inte visas
och som indikerar att det är en öppning av typen read only.

och

Rec_show.Open SQL_show, Conn, 1, 3
visar förändringar gjorda av andra och låser recorden endast när man uppdaterar.

262 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)