Hej, Det stämmer väl ungefär. En IIS-session är default 20 min så efter 20 min så kommer du tappa allt tillstånd i applikationen om den helt förlitar sig på att spara tillståndet i Session. vad är det för typ av data du lagrar i viewstate som tar så mycket plats? Jag måste säga att jag håller med Ola lite här.. (btw Ola, jag antar att du vet att det är först 20 min efter att användaren senast avände sin session som den tappar tillståndet, så länge användaren kör mot en Session så lever den, kör med "sliding". Finns det något bra verktyg för att analysera vad som finns i en sidas Viewstate? Vet med mig att vår site skickar flera dataset fram och tillbaka men vore kanon att se innehåll och storlek av dessa. Ja det finns det Om man har en UserControl som genererar en GridView på 100 rader så blir min sida 389 kb om man klickar på visa källa och sparar filen som .txt. Själva ViewState är på 122 kb av den sidan. Om du har en GridView i en User Control (.ascx) så kommer den lägga sin "control state" i sidans ViewState, alltså den sida som din User Control finns på. Så det är på Web Form nivå som du måste hantera ViewStaten.Viewstate vs Session
Jag håller på att skriva en massa webcontroller och utgår ifrån några exempel jag hittade på webben.
Där används viewstate för att hålla kontrollens datasource.
Min datasource som jag bygger upp blir rätt stor och då blir även viewstate det, När jag använder flera kontroller tillsammans så kommer jag i ett läge upp i 1 mb, detta känns lite väl mycket :).
MEN om jag byter ut viewstate mot HttpContext.Current.Session så kommer jag ner i 200 k, och funktionaliteten verkar intakt.
Om jag förstått det hela rätt så är viewstate enbart en postvariable som skickas fram och tillbaka till sidan om och om igen. Men session sparas på servern, och om jag använder mig av den så kommer ingen onödig information skickas fram och tillbaka.
Stämmer detta eller har jag missat nått?
Och om det stämmer varör skall man någonsin använda sig av viewstate istället för session?Sv: Viewstate vs Session
En annan sak är skalbarhet: Om du har en riktigt stor sajt med tusentals träffar/sekund vill man inte lägga för mycket i Session (dvs serverns RAM-minne, som är begränsat). Generellt håller man inte tillstånd på så mycket som 1 MB. Om du har en stor grid (en tabell) som oftast repopuleras vid postback t.ex. när användaren filtrerar data, så är det lika bra att stänga av Viewstate och låta gridden återskapas vid varje postback.Sv: Viewstate vs Session
du kan göra en egen viewstate hantering som skriver ner den på servern så slipper du de problem som kan uppstå med förstora sessions.
i den här artikeln http://msdn.microsoft.com/en-us/library/ms972976.aspx
under rubriken "Specifying Where to Persist the View State" kan du hitta hur du gör för att spara viewstate på servern i stället för att skicka det till klienten
edit: Finns snyggare och enklare lösning i asp.net2.0
http://msdn.microsoft.com/en-us/library/aa479403.aspxSv:Viewstate vs Session
Att lägga data i en Session kan leda till värre problem än att ha datan i en ViewState.. så ett tips, spara inte ner det i Session.. stäng av ViewState för din kontrol och se till att hämta data varje gång istället.. för default så kommer all data som visas i GridView att läggas i ViewState, enbart för att slippa göra en data access när det görs en postback. Detta har MS gjort för att slippa fråga databasen efter ny data vid en postback (viilket kan öka prestandan), men har du så mkt data som i Mb så låter det inte så bra att skicka den datan från och till servern och det är ABSOLUT inte bra att lägg det i en Session. Det finns så många robottar och "competitive inteligence companies" (föratag som kör request för att plocka ut data) som kan access din site och för varje access så skapas en ny session, samma för alla användare etc. Det kan gå väldigt snabbt att få en OutMemoryException om du har otur. Om du lägger saker i en Session så kör då med Weakreference, då kan Garbage Collection kan ta och rensa bort din data om det behövs mer minne till något annat, samt lägg så lite som möjligt i en Session.
Mvh Fredrik Normén
ASP.Net MVP MEET ASPInsider
http://weblogs.asp.net/fredriknormenSv: Viewstate vs Session
verktyg föratt se viewstate
se svaret i din sepparata tråd.
http://www.pellesoft.se/communicate/forum/view.aspx?msgid=274520&forumid=10&sum=1#274525Sv: Viewstate vs Session
Testade med exemplet i http://msdn.microsoft.com/en-us/library/aa479403.aspx
Men den klagar på att jag kör sidan i en .ascx. Hur kan man göra för att komma runt det?Sv:Viewstate vs Session