/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
masser af quieries på samme side
Fra : Lars Hoffmann


Dato : 03-11-03 12:51

Jeg ønsker at optimere databasekaldene på min hjemmeside. Da siden er
tilgængelig på flere forskellige sprog, hentes alle tekster ud af en
database. Dette bliver til en hel del database kald pr side. Der er
tale om ganske simple SQL sætninger a lá "SELECT text FROM Tokens
WHERE id=55 and lang=1", så selve SQL sætningen er så optimal som den
kan blive. Jeg ønsker dog ikke at åbne og lukke database forbindelsen
hele tiden, da det vil give en del spild. Hvordan kan jeg bedst åbne
databaseforbindelsen i starten af siden og lukke den til slut, når
man tager i betragtning at alle disse databasekald sker i en
funktion?
Med venlig hilsen
Lars Hoffmann



 
 
Jesper Stocholm (03-11-2003)
Kommentar
Fra : Jesper Stocholm


Dato : 03-11-03 12:58

Lars Hoffmann wrote :

> Jeg ønsker at optimere databasekaldene på min hjemmeside. Da siden er
> tilgængelig på flere forskellige sprog, hentes alle tekster ud af en
> database. Dette bliver til en hel del database kald pr side. Der er
> tale om ganske simple SQL sætninger a lá "SELECT text FROM Tokens
> WHERE id=55 and lang=1", så selve SQL sætningen er så optimal som den
> kan blive. Jeg ønsker dog ikke at åbne og lukke database forbindelsen
> hele tiden, da det vil give en del spild. Hvordan kan jeg bedst åbne
> databaseforbindelsen i starten af siden og lukke den til slut, når
> man tager i betragtning at alle disse databasekald sker i en
> funktion?

set oCon = Server.CreateObject("ADODB.Connection")
connString = <din connection string>
oCon.Open(connString)

private sub GetData(Connection_Object)
   ' hent tekster her
   set rs1 = Connection_Object.Execute(<some sql>)
   set rs2 = Connection_Object.Execute(<some other sql>)
   ' ...
end sub

' use function to get data
call GetData(oCon)

' clean up
oCon.close
set oCon = nothing

--
Jesper Stocholm
http://stocholm.dk
Give a man a fish and he will have food for a day,
give a man an elephant, and he will have food for a week.

Lars Hoffmann (03-11-2003)
Kommentar
Fra : Lars Hoffmann


Dato : 03-11-03 13:17


"Jesper Stocholm" <j@stocholm.invalid> escribió

> set oCon = Server.CreateObject("ADODB.Connection")
> connString = <din connection string>
> oCon.Open(connString)

Kan jeg med fordel gemme ADODB objectet i f.eks en application
variabel?

Med venlig hilsen
Lars Hoffmann



Peter Lykkegaard (03-11-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 03-11-03 13:50


"Lars Hoffmann" wrote in a message
>
> Kan jeg med fordel gemme ADODB objectet i f.eks en application
> variabel?
>
Den korte version - _nej_

Men du evt gemme et array - eller bedre et dictionary

- Peter



Torben Brandt (03-11-2003)
Kommentar
Fra : Torben Brandt


Dato : 03-11-03 22:43

Peter Lykkegaard skrev:
> "Lars Hoffmann" wrote:
>
>>Kan jeg med fordel gemme ADODB objectet i f.eks en application
>>variabel?
>
> Men du evt gemme et array - eller bedre et dictionary

Jeg ved ikke noget om det, men kom i tanke om at have læst Allan Ebdrup
skrive "Put ALDRIG Dictionary eller ADO objekter i session eller
application variable."

Kilde og sammenhæng:
<URL:http://netcoders.dk/articles.asp?mode=show_article&tech_id=1&article_id=93&submode=show_message&comment_id=art_93&message_id=36948>

/Torben


Peter Lykkegaard (03-11-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 03-11-03 23:41

Torben Brandt wrote:
> Peter Lykkegaard skrev:
>> "Lars Hoffmann" wrote:
>>
>>> Kan jeg med fordel gemme ADODB objectet i f.eks en application
>>> variabel?
>>
>> Men du evt gemme et array - eller bedre et dictionary
>
> Jeg ved ikke noget om det, men kom i tanke om at have læst Allan
> Ebdrup
> skrive "Put ALDRIG Dictionary eller ADO objekter i session eller
> application variable."
>
Hmm, jeg kan sgu heller ikke huske ;.-)
Den her kommer omkring problematikken og angiver nogle muligheder
http://www.aspfaqs.com/aspfaqs/ShowFAQ.asp?FAQID=129

Threadsafe dictionary component
http://www.narfle.com/ref/3rdPartyCom/caprockDCT.asp

- Peter



Peter Lykkegaard (03-11-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 03-11-03 13:04


"Lars Hoffmann" wrote in a message

> Jeg ønsker at optimere databasekaldene på min hjemmeside. Da siden er
> tilgængelig på flere forskellige sprog, hentes alle tekster ud af en
> database. Dette bliver til en hel del database kald pr side.

Hvilken database?

> Jeg ønsker dog ikke at åbne og lukke database forbindelsen
> hele tiden, da det vil give en del spild.

Hvis det er MSSQL så _skal_ du netop sørge at lukke din connection correct
Dvs
MyConn.Close
Set MyConn = Nothing
således at du netop får fordelene ved connection pooling

- Peter



Lars Hoffmann (03-11-2003)
Kommentar
Fra : Lars Hoffmann


Dato : 03-11-03 13:26


"Peter Lykkegaard" <polonline@hotmail.com> escribió en el mensaje
news:_urpb.3201$p53.1522@news.get2net.dk...
>
> "Lars Hoffmann" wrote in a message
>
> > Jeg ønsker at optimere databasekaldene på min hjemmeside. Da
siden er
> > tilgængelig på flere forskellige sprog, hentes alle tekster ud af
en
> > database. Dette bliver til en hel del database kald pr side.
>
> Hvilken database?

MSSQL server


> > Jeg ønsker dog ikke at åbne og lukke database forbindelsen
> > hele tiden, da det vil give en del spild.
>
> Hvis det er MSSQL så _skal_ du netop sørge at lukke din connection
correct
> Dvs
> MyConn.Close
> Set MyConn = Nothing

Naturligvis, men det vil jeg helst gøre så få gange som muligt, da
jeg ikke ønsker at åbne og lukke databasen ved hvert eneste database
kald. Hvis jeg har f.eks 50 kald på en side, vil det logiske nok være
noget i stil med:

åbne ADODB.connection
åbne ADODB.recordset
set recordset = connection.execute(SQL1)
set recordset = connection.execute(SQL2)
set recordset = connection.execute(SQL3)
set recordset = connection.execute(SQL4)
....
set recordset = connection.execute(SQLX)
lukke ADODB.recordset
set ADODB.recordset = nothing
lukke ADODB.connection
set ADODB.connection = nothing


Eller hvordan kan det optimiseres?
Med venlig hilsen
Lars Hoffmann



Peter Lykkegaard (03-11-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 03-11-03 13:49


"Lars Hoffmann" wrote in a message
>
> > Hvis det er MSSQL så _skal_ du netop sørge at lukke din
> > connection correct
> > Dvs
> > MyConn.Close
> > Set MyConn = Nothing
>
> Naturligvis, men det vil jeg helst gøre så få gange som muligt, da
> jeg ikke ønsker at åbne og lukke databasen ved hvert eneste database
> kald. Hvis jeg har f.eks 50 kald på en side, vil det logiske nok være
> noget i stil med:

Det ser ud som at du lukker din connection i forhold til din scriptkode
Men rent praktisk bliver den ikke lukket den bliver givet tilbage til din
pool af connections...
Jeg mener 4guysfromrolla har nogle artikler vedr connection pooling, og
hvordan man bruger det
Det er faktisk rimelig transparant i forhold til den aktuelle kode
Første betingelse er at man sørger for at bruge close metoden hver gang

- Peter







Lars Hoffmann (03-11-2003)
Kommentar
Fra : Lars Hoffmann


Dato : 03-11-03 14:39


"Peter Lykkegaard" <polonline@hotmail.com> escribió

> Det ser ud som at du lukker din connection i forhold til din
scriptkode
> Men rent praktisk bliver den ikke lukket den bliver givet tilbage
til din
> pool af connections...

Ok, nu fik jeg lige læst om connection pool på 4guysfromrolla. Jeg
vil da prøve at se hvad der giver bedst performance.
Med venlig hilsen og tak for hjælpen



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408930
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste