Avatar billede ulrikp Nybegynder
25. august 2003 - 10:56 Der er 10 kommentarer

session/application, memory

Jeg har ca. 400 lande med tilhørende beløb, som skal være tilgængelige på alle sider. Disse lande/beløb vil kun blive ændret sjældent.
Derfor ville det være oplagt at gemme enten et 2-dimensionelt array eller en lang string (<option value=1>Danmark</option>...) i en application-variabel, så databaseopslaget kun skal ske én gang.
Mit spørgsmål er: Er det uhensigtsmæssigt at have så meget data liggende i en application- eller session-variabel (her tænker jeg specielt på hukommelsesforbruget)?
Avatar billede cesil Nybegynder
25. august 2003 - 11:03 #1
Når det ikke drejer sig om mere end 400 poster, hvorfor så ikke bare gemme det i en database. Hvis du undgår joins vil dit opslag vel ta omkring et sekund.
Avatar billede cesil Nybegynder
25. august 2003 - 11:04 #2
Application variabler og session variabler er dyre og bruge, og jeg kan slet ikke se fidussen med dem i dit tilfælde.
Avatar billede cesil Nybegynder
25. august 2003 - 11:09 #3
Det kunne se således ud.

Set oRs = oConn.Execute("SELECT * FROM country ORDER BY country")
<% Do While Not oRs.EOF %> 
    <option value="<%=oRS("country")%>"><%=oRs("country")%></option>
<%     oRs.Movenext
loop
oRs.Close
Set oRs = Nothing
%>
Avatar billede ulrikp Nybegynder
25. august 2003 - 11:13 #4
Det er for at undgå at foretage database-opslaget 2 gange pr. side (idet der skal dannes to identiske dropdown's med de 400 lande). Lad os sige at en bruger skifter side 8 gange mens han er på websitet. Da skal der foretages 16 databaseopslag, for at danne den samme dropdown. Det virker lidt overkill. Så skulle man da tro at det var mere hensigtsmæssigt at danne dropdown'en en gang for alle... Men I mener altså at det er bedre - både hukommelses- og hastighedsmæssigt - at foretage databaseopslaget, hver eneste gang en side loades? Der skal ikke foretages JOINS!
Avatar billede cesil Nybegynder
25. august 2003 - 11:23 #5
okay, når opslaget skal foretages flere gange på samme side kan du ha ret i at det er overkill.
Men Stadigvæk ville jeg prøve

Set oRs = oConn.Execute("SELECT * FROM country ORDER BY country")

<select size="1" name="country">
<% Do While Not oRs.EOF %> 
    <option value="<%=oRS("country")%>"><%=oRs("country")%></option>
<%   
oRs.Movenext
loop
%>
</select>






<select size="1" name="country2">
<%
oRs.movefirst
Do While Not oRs.EOF %> 
    <option value="<%=oRS("country")%>"><%=oRs("country")%></option>
<%   
oRs.Movenext
loop
%>
</select>


<%
oRs.Close
Set oRs = Nothing
%>
Avatar billede ulrikp Nybegynder
25. august 2003 - 11:27 #6
cesil: Tak for hjælpen. Jeg er dog ikke helt tilfreds din argumentation, eller mangel på samme, så ingen point endnu...(-:
Avatar billede mccannon Nybegynder
25. august 2003 - 15:24 #7
hvorfor ikke hente det hele ud i et array  så behøver du kun at rode i db'en engang :)

feks:
'åben conn
'åben recordset
If nor RS.EOF THEN
ArrRec = RS.GetRows
End if
'luk recordset
'luk conn
så har du et 2 diminsionelt array...

for i = 0 to Ubound(ArrRec,2)
response.write ArrRec(1,i)
next
Avatar billede mccannon Nybegynder
25. august 2003 - 15:25 #8
umm nor = not
Avatar billede mccannon Nybegynder
25. august 2003 - 20:17 #9
hmm..meget stille
Avatar billede ulrikp Nybegynder
02. september 2003 - 21:02 #10
mccannon: Du svarer heller ikke rigtigt på det jeg spørger om. Jeg ved godt, hvordan jeg opretter et 2-dimensionalt array, og at jeg dermed kun skal rode i db'en en gang, men er det klogt at have så "store mængder" data i en application variabel? Her tænker jeg på webserverens hukommelsesforbrug, og sitets hastighed... Hvad er bedst, når det er disse to parametre, jeg vil vurdere det udfra?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester