Min nyfikenhet slog till. Begrunda denna lilla psuedofunktion...
Function DataFiffel()
Dim adoConn1, adoConn2
Dim adoRS1, adoRS2
Set adoConn1 = Server.CreateObject("ADODB.Connection")
Set adoRS1 = Server.CreateObject("ADODB.Recordset")
adoConn1.Open(...)
Set adoRS1 = adoConn1.Execute(...)
While Not adoRS1.EOF
Set adoConn2 = Server.CreateObject(...)
Set adoRS2 = Server.CreateObject(...)
adoConn2.Open(...)
Set adoRS2 = adoConn2.Execute(...)
While Not adoRS2.EOF
(...)
Wend
adoRS1.MoveNext
adoRS2.Close : Set adoRS2 = Nothing
adoConn2.Close : Set adoConn2 = Nothing
Wend
adoRS1.Close : Set adoRS1 = Nothing
adoConn1.Close : Set adoConn1 = Nothing
End Function
Finns det någon mening i att skapa en helt ny anslutning (adoConn2) inne i while-loopen eller ska man använda den redan öppnade?
Dom två första anslutningarna är väl dom som tar lite tid, sedan tycker jag att det är connection pooling managern (eller vad den nu kan heta) som har hand om anslutningarna. Om tio användare råkar köra funktionen samtidigt kommer det att skapas 20 anslutningar ganska raskt (connection pool är tom från början) och under tiden att funktionen körs blir det ett väldigt skickande av connection objects fram och tillbaka.
Någon som har lust att säga något vettigt om det här?
Finns det någon mening i att skapa en helt ny anslutning (adoConn2) inne i while-loopen eller ska man använda den redan öppnade?
Om det är exakt samma Connection-typ och connection-string så tycker jag du ska använda den du redan har. Jämför med en socket: Om du vill skriva/läsa mot en viss IP och port och redan har en socket öppen och ledig varför då skapa en till? (Om det inte är multitrådat och det är det ju inte här.)
Engine^ skrev:
Om tio användare råkar köra funktionen samtidigt kommer det att skapas 20 anslutningar ganska raskt (connection pool är tom från början) och under tiden att funktionen körs blir det ett väldigt skickande av connection objects fram och tillbaka.
Nu är jag inte så insatt i just pooling, men i den mån providern stöder pooling så borde det ju bli så.
Slutligen tycker jag inte de här raderna:
Set adoRS1 = Server.CreateObject("ADODB.Recordset")
Set adoRS2 = Server.CreateObject(...)
Intressant jämförelse med sockets. Så har jag inte tänkt, men det borde ju faktiskt ligga en hel del i den jämförelsen. Dock har jag inte, så vitt jag kommer ihåg, läst att det finns något som heter socketpooling...
Jag får väl ta och göra lite tester på det hela och se vad som händer och fötter.
niko skrev:
Slutligen tycker jag inte de här raderna:
Set adoRS1 = Server.CreateObject("ADODB.Recordset")
Set adoRS2 = Server.CreateObject(...)