Läste en intressant artikel i DMZ som kom idag om att optimera ASP-kod. Artiklen hette "Att skriva effektiv ASP" och kändes nyttig för mig.
I ett avsnitt togs det upp ett ämne som diskuterats ganska hett här från och till. Tänkte dela med mig till er, deras synpunkt på den optimala hämtningen från en databas.
<%
Const adOpenForwardOnly = 0
Const adLockReadOnly = 1
Const adCmdText = &H0001
strConn = "DSN=bla ha bla ha"
Set objConn = Server.CreateObject("ADOdb.Connection")
Set objRS = Server.CreateObject("ADOdb.Recordset")
objconn.Open(strConn)
objRS.Open(strSQL, strConn, AdOpenForwardOnly, AdlockReadOnly, AdCmdText)
strSQL = "SELECT req_Username, Req_Email, LastVisit " & _
"FROM Profil " & _
"ORDER BY req_Username DESC"
arrMyData = objRS.GetRows()
objRS.Close()
Set objRS = Nothing
objConn.Close()
Set objConn = Nothing
%>
En kort förklaring till varför just denna var den optimala kommer här:
Den öppna databaskopplingen skickas som argument till Openmetoden av recsetobjectet. Fördel: Det kommer aldrig finnas 2 kopior av recordsetet i minnet, vilket alltid blir fallet om man använder execute metoden.
Användandet av konstanter i recordset-objecten. I form av AdOpenForwardOnly, AdlockReadOnly, AdCmdText. Enligt källan den snabbaste typen av cursor man kan öppna.
Detta blev mkt kort, men jag orkade inte skriva längre.
Källa: Artikeln "Att skriva effektiv ASP" från DMZ.
vänligen Jörgen
------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***
Det jag undrar är hur du gör två sökningar om du använder objRS.Open för att öppna ett recordset? Och om det går vad är då execute fortfarande det snabbaste sättet?
Håller med Vide.
Recordset skall man endast försöka använda sig av när man behöver låsa poster, och man behöver kunna stega valfritt mellan dom.
Ska man bara hämta data är Recordset helt onödigt.
Rent prestandamässigt så är det väl bara att testa.. :-)
Glömde en liten detalj.
3) Det är enbart vid select man har nytta av att skapa ett recordset, vid update, insert och delete behövs inte detta. På grund av att man inte har nytta av ett tomt recordset. Och då kunde man med fördel skriva:
Set objConn = Server.CreateObject("ADOdb.Connection")
With objConn
.open strConn
.Execute
strSQL, intRecs, AdCmdText + adExecuteNoRecords
.Close
End With
Set objConn = Nothing
Jag vet inte, jag är inte så hemma i ASP än så länge, men det är en intressant sak att diskutera.
mvh
Jörgen
------------------
*** Var går gränsen mellan långa kortbyxor och korta långbyxor? ***
Det är enbart vid select man har nytta av att skapa ett recordset, vid update, insert och delete behövs inte detta. På grund av att man inte har nytta av ett tomt recordset.
Jag hoppas ingen har sagt något annat... :)
------------------ Vide rox = new Vide();
rox.learn("C#"); webeye.nu
365 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2