Är det viktigt att stänga alla recordset man öppnar? Dör servern till slut om man lämnar för många öppna? Jag har nämligen problem med att sidorna inte kan visas om servern inte har hunnit läsa klart i rs innan det stängs. Det verkar som en process som läser i rs kan hålla på även till "nästa rad" i asp-filen så att rs stängs medan det läses... Ja, du måste alltid stänga ditt recordset samt frigöra connection efter dig också, annars tar det en stund innan webbservern gör timeout. Är det många som besöker din sida är det lätt att det blir trångt med anslutningarna rätt fort. Alltså, Pelle har ju inte fel som tycker att man ska döda alla objektreferenser när en sub terminerar. Men, jag dödar aldrig con-objektet och heller inte alltid rs-objekten eller cmd-objekten. Det där håller jag inte med om. Absolut hell fel sätt att göra det på. Belastar server betydligt mer än vad som krävs. Objeken tar mine och resurser i anspråk. För alla sessioner. Objekten behövs endast när en sida exetueras. Därför bör man inte spara dem. Utan öppna och stänga dem så fort som möjligt. Mmm överallt man läser så står det nästan med fet stil att man alltid ska stänga dem så snabbt som möjligt. Oj då. Den tog. Glad att du inte skrivit koden till pellesoft. Skulle sidorna vara betydligt slöare och slukat betydligt mer resurser. Om det inte skulle ta kål på servern helt. Hej igen. Förlåt då. Jag har ingen praktist erfarenhet av någon större ASP site. Bara går efter det jag snappar upp i andra forum och från manuallen. Revirpinkning är det definitivt inte tal om. Här är vi alla på samma sida och väldigt intresserade av om det kommer upp någon ny teori som kan tänkas vara bättre än den man inpräntats att göra. Jag skulle vilja dela med mig av "mina år av erfarenhet och år som instruktör/ seminarie hållare" P.S.Stänga recordset?
Blev det snurrigt nu? :-)Sv: Stänga recordset?
rst.close
con.close
set rst = nothing
set con = nothing
/PelleSv: Stänga recordset?
Alla objekt dör automatiskt när subben lämnar sitt scope.
Min lösning är att rigga en session-specifik conn, som man krokar i asparna a la set conn = Session("CONN"). Detta funkar mycket balanserat och bra.
CONN kan man plocka ner i session_onend. Annars självdör den precis som alla andra variabler. (Detta gäller på site med hundratals samtidiga extremt databasintensiva sessioner. Varje ord på sidorna slås mot upp med recordset-objekt t.ex.)
Det är tvärtom så att man inte ska försöka optimera detta, utan släppa hela saken till MDAC. Ditt problem kanske bottnar i något annat.
(OBS att resonemanget inte gäller traditionell vb-programmering.)Sv: Stänga recordset?
Enligt alla dokument som finns tillgängliga så är regeln, stäng så fort du använt det. Ett objekt gör timeout på 20 minuter och tänk dig så många gånger du kan starta nya på 20 minuter.
Nej, stäng och frigör efter er så fort det går
Hälsningar
/PelleSv: Stänga recordset?
Sv: Stänga recordset?
Sv: Stänga recordset?
Sv: Stänga recordset?
Jag vet att dokumentationen alltid föreslår att man ska ta kål på objektvariabler när de är använda. Men de dör likt förbaskat när de tappar sitt scope.
Dessutom resonerar jag bara utifrån vad jag sett live.
Men som vanligt bryr jag mej inte om vem som har rätt, bara det funkar.
Lycka till!!Sv: Stänga recordset?
Sv: Stänga recordset?
Jag är verkligen inte ute efter att mästra någon. Det har jag inget att vinna på. Jag har just hittat Pellesoft och tycker det är trevligt att det finns en plats där man kan fråga, ge och få synpunkter.
Jag har däremot svårt att ge mej på punkten om connection pooling. Min bestämda erfarenhet är att det funkar hur bra och balanserat som helst med att INTE göra close och set nothing på objektreferenser. Detta tvärtemot vad Microosoft, och flera med dem, säjer.
Jag har arbetat med vb sedan urminnes tider, kanske en belastning, och med asp + sqlserver + as/400 på NT sedan flera år.
De problem med prestanda jag haft har bottnat i att jag försökt hantera den optimering, som servern klarar bättre. Mina reflektioner och synpunkter är således helt och hållet hämtade från verkliga case.
Jag bygger och har byggt platser med webb-handel åtskilliga med budget och annan ekonomi. Samtliga är mycket databasintensiva.
Jag har agerat instruktör i många år på vb. Tro mej när jag säjer att ms dokumentation inte alltid är det enda rätta.
När jag pratar webb-handel menar jag produktregister och prislistor i sql-server, medlemsinfo och statistik i as/400. Vi pratar 5000 till > 1 milj transar i tabellerna, samt uppemot 500 samtidiga användare.
IBMs och Microsofts tekniker har mätt, tittat och förklarat: oerhört balanserat.
Utan att röra upp känslorna på de mest frekventa besökarna på denna sidan vill jag be er redogöra med annat än referenser till dokumentation hur ni vet att mitt resonemang inte stämmer. Jag vet ju det!
Vi är utvecklare i samma värld. Låt oss inte bli ortodoxa revirpinkare innanför staketet också!
Lycka till!!!Sv: Stänga recordset?
Men litar fortfarande inte på att det är bästa sättet att göra det.
Om du kan sägga att du hade exak samma uppsättning sidor fast den ena med öppna och stängande av cursors och den andra med bibehållen anslutning.
Att sedan göra ett test mot den. Då inget test med stress verktyg. Efter som detta har svårt att emulera det verkliga situationerna. Finns vissa stressverktyg som inte kan hantera sissioner. Alltså återanvänder samma session vid sinma förfrågningar. Ett sådant verktyg skulle kunna ge en helt snedvridenbild. Skulle givetvis gynna att man bibehöll sesionen.
Jag vet inte vad jag snackar om nu. Men gärna nyfiken vad som skulle hända prestanda mässigt om du kopierade sidorna och ändrade så den stänger och öppnar anslutniungarna. Skulle det påverka prestandan posetivt, negativt eller vara oförändrat?Sv: Stänga recordset?
Jag funderar på om man inte kan göra någon form av testapplikation som körs under en period bara för att se skillnaden vinst eller förlust i millisekunder. på laddtider där man antingen väljer att köra pooling eller inte.
Nu har ju jag svårt att se pooling på pellesoft då jag inte använder några komponenter mellan för databasanropet utan får kalla asp-ado-sp-databas och på så sätt missar steget (MTS medlastbalansering och object pooling).
Om nu inte ADO klarar detta själv UTAN mts, vilket vore intressant att få veta en kommentar på, någon som vet?
/PelleSv: Stänga recordset?
1. Mdac sköter ingenting, MDAC såtr för Microsoft Data Access Components och är ett bibliotek med bla ADO och en bunte ole db providers.
2. Den som sköter connection poolingen är vanligtvis MTS eller COM+, finns det inte tillgång till det används delar av ODBC teknologin för att tillhandahålla connection pooling. Vilket bla alla ADO/OLE DB bibliotek innan MDAC 2.1 släpptes.
3. Det är sant att objekt förstörs när de går "out of scope" men det som går "out of scope" är ado's connection object. Det är inte den verkliga connectionen utan den sköter OLE DB och ado's objekt är bara en abstraktion. Det innebär att du visserligen dödar dina objekt, men de släpps inte tillbaka till poolen. För att göra det måste du explicit säga cn.close så ado kan tala om för OLE DB att vi vill ha sessionen i polen. Annars är default behavoir att kasta den.
4. Att lägga ett connection objekt i en sessions variabel är dåligt ur skalbarhet(förväxla nu inte skalbarhet med prestanda för de har ingeneting med varandra att göra) synpunkt av två igentliga anledningar:
A. Sessioner skalar inte ut, dvs om du har en webfarm med flera maskiner så följer inte sessions objektet med om användaren flyttas till en server med mindre belastning. Vilket i praktiken betyder att ett nytt session objekt måste öppnas och sparas i en session, medans det gamla väntar på att komma till timeout.
B. Du tar upp mer resurser än du behöver per användare, vilket blir en flaskhals vid tung last. En användare som går mot en transaktions tung sida använder i ett bra system kanske inte sin connection mer än några milliskeunder eller max någon sekund, men kan surfa runt på sajten i oändlighet igentligen. Varför då ha den i en session? Det blir en definitv flaskhals och i det stora hela syns det garanterat.
5. Det är möjligt att microsoft ofta föreslår lösningar som inte är så bra, men i det här fallet har de uppbackning inte bara av MS fanatiker utan även av tex Developmentor och Vb2TheMax, vilka är två instanser som är ruggit oberoende och mer komptenta än all den kunskap vi kan få ihop här. Självklart skall man vara källkritisk, men ibland får man ta att tänka till lite själv och fundera på hur tekniken bakom igentligen fungerar också i kontext med deras påståenden.
my 2 centsSv: Stänga recordset?
Bli inte avskräckt från pellesoft nu. Vi är snälla och rara. Men vi är som du en bunt it-narkomaner som står för våra åsikter. Helst närr vi vet att vi har rätt och varför.
Välkommen föresten.
Hoppas du har mycket glädje av vad denna underbara site har att erbjuda dig.
Men stäng för gud skull dina anslutningar och recordsets. ;O)
D.S.