webForumDet fria alternativet

Session och RAM

3 svar · 416 visningar · startad av HammerBoy

HammerBoyMedlem sedan feb. 2006144 inlägg
#1

Låt oss säga att jag skapar en sessionvariabel när en användare surfar in på min sida enligt följande: Session("Page") = "1". Då undrar jag... hur många bytes kommer webbservern att belastas med pga denna sessionvariabel? Inklusive allt!

OveRRidEMedlem sedan feb. 200112 078 inlägg
#2

Ja du, jag har ett förslag och en fråga;

  1. Förslag; packa inte session full med data, speciellt inte med objekt, det är förbjudet.
  2. Fråga; varför undrar du?

Men i övrigt tycker jag att du borde räkna med så mycket data som du har i variabeln, plus lite överhead för hanteringen. Exakt hur mycket vågar jag inte svara på, men har du t.ex. tusen tecken i en sessionsvariabel så borde det ju motsvara 1 kB.

Tumregel är väl att det i regel inte är session som är ett prestandaproblem på en server om man använder det vist. Att räkna sessions-variablars minnestyngd på en modern server är någon man inte gör sålänge man inte har väldigt mycket data i session (eller en speciell applikation), speciellt inte om det handlar om strängar.

HammerBoyMedlem sedan feb. 2006144 inlägg
#3

Vad gäller punkt 1 så håller jag med dig till 100% :)
Vad gäller punkt 2 så frågar jag därför att en kompis och jag trätar om hur mycket plats det egentligen tar upp. Jag hävdar att det finns overhead som tillkommer men jag kan inte säga exakt vad det är samt exakt hur mycket plats det tar. Därför ställde jag frågan med en sessionvariabel som endast innehöll ett enda tecken. Det har egentligen ingen praktisk betydelse för min del. Bara en nyfiken fråga :)

spangoMedlem sedan juni 20008 205 inlägg
#4

HammerBoy skrev:

Vad gäller punkt 2 så frågar jag därför att en kompis och jag trätar om hur mycket plats det egentligen tar upp. Jag hävdar att det finns overhead som tillkommer men jag kan inte säga exakt vad det är samt exakt hur mycket plats det tar. Därför ställde jag frågan med en sessionvariabel som endast innehöll ett enda tecken.

Det stämmer att det blir overhead. För varje entry sparas inte bara värdet, utan också nyckeln, vilket betyder ditt exempel sparar två strängar, "Page" och "1". Sen har sessionsobjektet värdena sparade internt i någon datastruktur (gissningsvis hashtabell eller binärträd), så det krävs en nod med minst två pekare (en för nyckel, en för värde; storleken är 4 byte på 32-bitarsholkar, 8 på 64-bitars) i den datastrukturen också. Sen finns det en overhead i alla objekt (alla som är managed, iaf) också, för de två strängarna är det gissningsvis en, två eller fyra byte (en eller två om de är nullterminerade, fyra om de har längdangivelse).

Så overheaden i ditt exempel blir minimalt nåt i stil med:
nyckelns storlek + värdets storlek + overhead för nyckeln + overhead för värdet + storleken av två pekare

Ska vi göra en pessimistisk uträkning säger vi att tecknen internt representeras som wide characters på två byte, och använder maxvärdena i mina antaganden:
8 + 2 + 4 + 4 + (8 * 2) = 34 byte
Antag sedan att jag missat något, så vi rundar av uppåt till 50 byte. Fortfarande inte värst mycket, men har sessionerna en livstid på 30 minuter och du har fler än, sig, 10000 unika besökare i sekunden, så kan det börja bli kämpigt ;)

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)