Gemme objekter i session ,hvordan virker det præcist ?
Jeg er blevet lidt forvirret mht til gemning af data i session.Jeg havde oprindeligt en ide om, at hvis man gemmer et objekt i Session, så er det en kopi som gemmes. Men det lader ikke til at være tilfældet.
Har lavet et lille script til test:
Dim a As New ArrayList
a.Add(1)
a.Add(2)
a.Add(3)
Session("a") = a
Dim b As New ArrayList
b = CType(Session("a"), ArrayList)
'fjerner sidste post i b
b.RemoveAt(b.Count - 1)
MsgBox(a.Count)
Det sjove her er, at a.count = 2 og ej 3.
Hvad jeg ikke helt forstår er at lighedstegnet synes at have forskellig betydning, afhængig af hvad vej data går :
Session("a") = a må jo nødvendigvis gemme a's indhold, siden den kan hentes igen på en anden side. Jeg troede det ville være en kopi, men mit lille eksempel ovenover synes at pege på pointers. (og at Session("a") så lægger beslag på de data in memory som definerede a og a's indhold).
Hvordan funker det så når a bliver nedlagt efter aspx siden er blevet rendered ?
Årsagen til at jeg spørger er, at man jo kan gemme session-data forskellige steder. Når jeg, som i mit eksempel, referer til et objekt som var blevet hentet fra session, så ser det jo udtil at det er kun en pointer som er blevet hentet, mens de ændringer jeg laver laver jeg på det oprindelige objekt. Hvis objektet så er storet i f.eks. en SQL db elsewhere, så er det jo for det første nok en smule langsommeligt, og for det andet så kan mit objekt jo forsvinde når som helst, og jeg burde derfor checke det før hver tilgang If Not ISNothing(mitobjekt).
Er jeg totalt galt afmarcheret ? Har googlet lidt, men kan ikke finde nogen aktuel og for en mig en forståelig og skåret-ud-i-pap artikel om emnet.