Avatar billede falslev Nybegynder
14. april 2005 - 12:53 Der er 19 kommentarer og
1 løsning

Kan man sætte Application til at udløber efter xx min.

Ligesom man sætter levetid på en cookie kan man så os gøre det på en Session og/eller Application?
Avatar billede ldanielsen Nybegynder
14. april 2005 - 13:02 #1
Application lever så længe sitet kører og der er aktive sessions. En application starter kun forfra når:
- Sitet stopper og starter
- Der ikke er flere aktive sessions
- Global.asa overskrives

En Session stopper når:
- Den har været inaktiv i Session.TimeOut minutter
- Session.Abandon køres

Kan det bruges? Hvad var det du ville med det?
Avatar billede busschou Praktikant
14. april 2005 - 13:05 #2
levetiden på en session sættes ved
Session.Timeout = 60
for 60 minutter
Avatar billede falslev Nybegynder
14. april 2005 - 13:06 #3
Jeg skal bruge det til at vise de 10 nyeste indlæg på min side.
For at det ikke skal være for tungt for min database vil jeg så gemme dem i en Application og sætte levetiden til 5 min.

Men det mener du altså at man ikke kan?
Avatar billede falslev Nybegynder
14. april 2005 - 13:09 #4
Ved godt at jeg kan lave det ved selv at gemme tiden og så måle på om den er overskredet, men håbede man kunne slippe for det.
Avatar billede busschou Praktikant
14. april 2005 - 13:14 #5
Hiver du indlægene ud fra en database?
For så kan du jo bare lave
Select * From din_table Order By tid ASC LIMIT 10
måske?
Avatar billede ldanielsen Nybegynder
14. april 2005 - 13:15 #6
Jo, det kan du godt.

Lav en Applicationvariabel der indeholdet top10'en. Se her

if dateDiff("n", Application("Top10Lavet"), Now()) > 5 then
  Application("Top10") = ""
end if

if Application("Top10") = "" then
  'Kode der henter og gemmer, sådan noget:
  Application("Top10") = Rec.GetRows
  ' eller hvad du nu vil
  Application("Top10Lavet") = Now()
end if



ikke testet!!
Avatar billede ldanielsen Nybegynder
14. april 2005 - 13:17 #7
Fidusen er at du så kan vælge i stedet, eller derudover, at Genskabe Top10 når nye indlæg gemmes, blot ved på den side at sige

Application("Top10") = ""

koden fra sidste indlæg skal så være på den side der viser Top10'en. Du kan helt droppe det med de 5 minutter.
Avatar billede busschou Praktikant
14. april 2005 - 13:20 #8
Undskyld jeg spørger :o)
Men hvad er fordelen ved at lave det over applicationen på den måde?
Bliver der sparet meget belastning på databasen eller?
For umiddelbart rent kodemæssig så synes jeg der er mere
Så bare nysgerrig :o)
Avatar billede falslev Nybegynder
14. april 2005 - 13:34 #9
ldanielsen, det var præcis den løsning jeg så mig nødsaget til at lave men gerne ville uden om.

busschou, det er hurtigere at kalde noget der ligger i Application fremfor at lave et DB opslag. Så der er der noget at hente vil jeg mene.

Når så en database samtidig indeholder over 150.000 indlæg er det meget hurtigere og yderst besparende for min DB vil jeg mene.

Kom gerne med en kommentar hvis jeg er helt gal på den.
Avatar billede ldanielsen Nybegynder
14. april 2005 - 13:34 #10
Hvis Top 10 skal vises på forsiden, og måske på alle mulige andre sider, vil det betyde at databasen skal spørges rigtig mange gange når brugeren surfer rundt på sitet. Der spares altså en masse databasekald.

Det er en form for offline data, og det er en rigtig god idé at bruge. Jeg har selv brugt det en del, f. eks. i butikker, hvor varetekst og pris kan gemmes på den måde. Det er jo endnu et eksempel på data der ikke ændrer sig særlig tit, men som skal vises mange gange på siden.

Man skal naturligvis ikke hive hele databasen over i Application variabler, det bliver nok for meget

Jeg ser lige om jeg kan finde en artikel jeg engang læste om netop dette ....
Avatar billede falslev Nybegynder
14. april 2005 - 13:34 #11
ldanielsen er du sød at lave et svar.
Avatar billede busschou Praktikant
14. april 2005 - 13:39 #12
ok jeg bliver klogere og klogere
Men nu jeg alligevel er med så tillader jeg mig lige at spørge om en ting.
Skal applicationen da ikke også slå op i databasen?
For hvor er besparelsen så henne...
måske jeg burde læse om det :o)
Avatar billede falslev Nybegynder
14. april 2005 - 13:41 #13
Jo men kun når den er udløbet.
Det vil sige i det her tilfælde 1 gange hvert 5 min.

Har man f.eks. 100 sidevisninger i min. spare du jo 499 opslag på bare 5 min.
Avatar billede ldanielsen Nybegynder
14. april 2005 - 13:41 #14
Næ, men jeg fandt nogle andre artikler om det:

http://authors.aspalliance.com/brettb/ASPDataCaching.asp

http://www.devx.com/vb2themax/Tip/18497

Jeg ville gemme data i et 2-dimensionelt array, men i disse artikler foreslår de at gemme html'en der viser data'ene
Avatar billede busschou Praktikant
14. april 2005 - 13:43 #15
Ok så er jeg med..
Smart nok ja!
Avatar billede ldanielsen Nybegynder
14. april 2005 - 13:46 #16
Svar

Overvej at følge mit forslag, at du opdaterer variablen når der gemmes nye indlæg. Så vil top 10 altid være up to date, og hvis der kommer mindre end et indlæg ind for hvert 5. minut vil det spare endnu flere opslag.

Men sørg for at du undersøger om variablen er tom der hvor den skal bruges. Så slipper du for at der kommer fejl hvis en bruger vil se siden samtideig med at variablen opdateres.

busschou > Application variablen indeholder IKKE en åben connection, denne idé er der mange der har fået og opgivet igen. Det man gemmer er ren tekst, evt et Array.
Avatar billede ldanielsen Nybegynder
14. april 2005 - 13:46 #17
Svar :o)
Avatar billede falslev Nybegynder
14. april 2005 - 14:06 #18
ldanielsen, du har ret i at det oftest ville være smartest.
Men "problemet" er at jeg har et nyt indlæg ca. hvert 10 sek. og derfor er det for krævende.

Tak for hjælpen.
Avatar billede busschou Praktikant
14. april 2005 - 14:11 #19
falslev >> hvis ikke det er vildt hemmelig kode så vil jeg blive glad hvis du (når det virker) ville skrive herinde hvordan du konkret gjorde...det ville være en god hjælp for mig tror jeg
Avatar billede falslev Nybegynder
14. april 2005 - 16:10 #20
Jeg har lavet en hver 86 sek. opdatere med antal brugere online.



IF Application("StatUsersOnline.LastModified")="" THEN
  Application("StatUsersOnline.LastModified")=Now()
ELSEIF DateDiff("s", Application("StatUsersOnline.LastModified"), Now()-0.001)>0 THEN    '? 0.001=86 sek
  Application("StatUsersOnline")=""
END IF

IF Application("StatUsersOnline")="" THEN
  CntUsersOnlineDateTime = Mid(FormatDateTime(Now()-0.010199, 2), 7, 4) & Mid(FormatDateTime(Now()-0.010199, 2), 4, 2) & Mid(FormatDateTime(Now()-0.010199, 2), 1, 2) & Mid(Replace(FormatDateTime(Now()-0.010199, 3), ":", "", 1, -1, 1), 1, 6) '? 0.010199=15 min.
  SQLstmt = "SELECT COUNT(DISTINCT SessionID) AS records FROM users_online WHERE LogDate>" & CntUsersOnlineDateTime & ";"
  Set RSCount = Conn.Execute(SQLstmt)
    Application.Lock()
      Application("StatUsersOnline")=FormatNumber(RSCount("records")-1, 0)
      Application("StatUsersOnline.LastModified")=Now()
    Application.UnLock()
  RSCount.Close
  Set RSCount = Nothing
END IF
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