[ASP.NET] Connection pool problemen *

Pagina: 1
Acties:

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 17:40
Ik heb een probleem met de connection pool. Volgens dit artikel worden connections vrijgegeven zodra je close of dispose aanroept:
Connections are released back into the pool when you call Close or Dispose on the Connection.
Ik heb nu een pagina die in een loop een aantal database berwerkingen uitvoert, waardoor het aantal connections die uitgevoerd worden in totaal op 90 komt. De standaard connection pool grootte is 100, dus dat is geen probleem. Wanneer ik echter nogmaals deze actie uitvoer, krijg ik een foutmelding dat er geen connectie uit de pool verkregen kan worden, terwijl deze eigenlijk allemaal weer vrijgegeven zouden moeten zijn. Toch? Ik gebruik in mijn loop SqlComands waarvan de connection SqlCommands waarvan de verbinding expliciet gesloten wordt met
code:
1
myConnection.close();
en SqlDataAdapters, die de verbinding zelf zouden moeten sluiten.

Wat doe ik verkeerd?

Roomba E5 te koop


Verwijderd

Ik weet niet zeker, maar het kan zijn dat de connections pas daadwerkelijk in de pool gegooid worden als de vuilnisman is langsgekomen.

Buiten dit, zou ik je je willen adviseren om niet steeds een connectie te openen en te sluiten. Aangezien je geen code hebt neergezet, kan ik niet zeggen of dat in jouw geval ook mogelijk is.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20:27

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 07 juli 2004 @ 23:54:
Ik weet niet zeker, maar het kan zijn dat de connections pas daadwerkelijk in de pool gegooid worden als de vuilnisman is langsgekomen.

Buiten dit, zou ik je je willen adviseren om niet steeds een connectie te openen en te sluiten. Aangezien je geen code hebt neergezet, kan ik niet zeggen of dat in jouw geval ook mogelijk is.
Voor zover ik weet wordt normaliter een connectie weer teruggegeven als die gesloten wordt; min of meer wordt dit ook aangegeven door de dispose. Niet pas op het moment dat de GC langs komt, aangezien je dan binnen notime de boel opblaast.

Meerdere keren een connectie openen in 1 request is dan ook geen probleem, aangezien je een pool hebt, waaraan alles teruggegeven wordt. Een connectie openen is op deze wijze niet duur.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

gorgi_19 schreef op 07 juli 2004 @ 23:59:
[...]
Meerdere keren een connectie openen in 1 request is dan ook geen probleem, aangezien je een pool hebt, waaraan alles teruggegeven wordt. Een connectie openen is op deze wijze niet duur.
Oke, misschien is het niet duur, maar alle beetjes helpen. Als je toch in een loop zit.....
Zelfde als in een loop elke keer een nieuwe variable creeeren, ipv voor je loop creeeren en in je loop alleen een nieuwe waarde toekennen. Oke, misschien is het peanuts wat het qua tijd scheelt, maar alle beetjes helpen......

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
90 connecties op 1 pagina?

Je opent (en sluit) in die loop toch niet telkens een connectie, want dat zou toch ook onnodig zijn.
Waarom open je de connectie niet buiten de loop, en sluit je ze na de loop?
code:
1
2
3
4
5
6
7
8
9
10
11
conn.Open()
try
{
     while( blaat )
     {
     }
}
finally
{
   conn.Close();
}


Een DataAdapter sluit enkel de connectie zelf, als hij ze zelf ook geopend heeft; maw: als jij zelf geen connection.Open() statement geschreven hebt, en als de connectie nog gesloten was toen de Fill aangeroepen werd.

iruoy: de garbage collector heeft niets te maken met het opruimen van de connectie. De connectie moet je nl. zelf sluiten door de Close method aan te roepen. De Garbage collector kan dit niet doen.

https://fgheysels.github.io/


Verwijderd

whoami schreef op 08 juli 2004 @ 08:22:
iruoy: de garbage collector heeft niets te maken met het opruimen van de connectie. De connectie moet je nl. zelf sluiten door de Close method aan te roepen. De Garbage collector kan dit niet doen.
True, mijn bedoeling was dat er misschien nog een actie van de GB nodig was om de connectie echt vrij te geven in de pool. Dus dat je met een .Close() aangeeft dat hij terug mag in de pool, maar dat de GB hem daadwerkelijk teruggeeft. Tuurlijk moet er een .Close() gebruikt worden. Dat staat bijna nog in het rood op een zwart wit print in elke pattern and practice van M$ Microsoft

modbreak: het bedrijf waarvan Steve Ballmer CEO is heet Microsoft, en het siert je als je het ook zo noemt. Kinderachtige verbasteringen als M$, Mickeysoft, Microsuck etc. etc. zorgen er alleen maar voor dat mensen je post niet serieus nemen.

[ Voor 19% gewijzigd door curry684 op 08-07-2004 11:56 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
De GC heeft er niets meer mee te maken; het zou trouwens nogal wat zijn: je weet nl. nooit wanneer de GC in actie treedt, dat zou dus willen zeggen dat je nooit exact weet wanneer je connectie naar de pool gebracht wordt.
De GC roept de finalize method van een object aan, en die method wordt gebruikt om managed resources vrij te geven.
De Dispose (en in het geval v/e connection, de Close) worden gebruikt om unmanaged resources zoals een DB connectie vrij te geven.

https://fgheysels.github.io/


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 17:40
Je opent (en sluit) in die loop toch niet telkens een connectie, want dat zou toch ook onnodig zijn.
Waarom open je de connectie niet buiten de loop, en sluit je ze na de loop?
Dit heb ik gedaan omdat er een datareader in zat, die zat te zeuren dat er al een andere datareader met de verbinding verbonde was. ik heb daar nu een dataadapter van gemaakt, misschine dat dat beter gaat. Ik kan helaas even niet verder testen alleen, moet eerst wat andere problemen oplossen.

Roomba E5 te koop


  • LoekD
  • Registratie: Augustus 2000
  • Laatst online: 11-05 17:04
Per connection kun je max. 1 datareader gebruiken op 1 moment. (DataReader.Close geeft connection vrij)
Een DataAdapter gebruikt onder de motorkap ook een DataReader, dus biedt geen oplossing.

Hoe meer je drinkt, hoe korter je leeft, hoe minder je drinkt


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:52
Er is wel een verschil, aangezien een data-adapter een datatable vult, en die data-reader dus onmiddelijk daarna terug gesloten wordt.

https://fgheysels.github.io/


  • LoekD
  • Registratie: Augustus 2000
  • Laatst online: 11-05 17:04
whoami schreef op 09 juli 2004 @ 09:06:
Er is wel een verschil, aangezien een data-adapter een datatable vult, en die data-reader dus onmiddelijk daarna terug gesloten wordt.
De DataReader wordt dus niet gebruikt om een object te vullen, en vervolgens gesloten? Vreemd...

Hoe meer je drinkt, hoe korter je leeft, hoe minder je drinkt

Pagina: 1