webForumDet fria alternativet

Antal Connections...

ASP

4 svar · 216 visningar · startad av Engine^

Medlem sedan dec. 20003 887 inlägg
Frågan#1

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?

Medlem sedan juni 20022 599 inlägg
#2

Engine^ skrev:

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(...)

fyller nån funktion i den här koden.

Medlem sedan dec. 20003 887 inlägg
#3

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(...)

fyller nån funktion i den här koden.

Helt sant. Jag förvirrade mig själv ;)

Medlem sedan mars 20007 896 inlägg
#4

Skriv dina egna pooler ( COM ) om du har tillgång och ork till det.

Medlem sedan dec. 20003 887 inlägg
#5

Tillgång: Ja.

Ork: :OO

266 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)