Jag skulle vilja lagra mitt DataSet i en session. Får inte riktigt rätt på det, om det nu går. Ja det går egentligen att lagra alla typer av objekt. Men det du gör här är "aja-baja". Tänk dig att sessionen lever minst 20 minuter och om du har 100 användare med 100 sessioner som varje har 100k lagrat så tynger du ner servern rätt ordentligt. Njäe det är juh inte riktig sant det där. Det finns ett par faktorer som man måste väga in. Det hela handlar om man vill ha <b>Chunky</b> (sällan men mycket) eller <b>Chatty</b> (ofta men lite) kommunikation över nätverket till sin server. Jag har en listbunden kontroll på en sida, i detta fall en datagrid. När jag klickar på någon post i denna kommer jag till en annan sida som visar ytterligare info om denna post. Du menar att jag gör ett nytt databasanrop för just det id jag vill åt på nästa sida istället för att spara hela kontrollen i en session ? Martin, Andreas, Johan En annan lösning på det hela är att använda dig av Paneler och ViewState ViewState genererar onödigt mycket trafik mellan klient & server och bör inte användas om man inte måste. Ola, Okej. "Men vad är bäst om du ska använda dig av samma object på nästa sida. Är det bättre att göra ett nytt databas uppslag eller är det inte bättre då att återanväda objectet från ViewState och på så sätt slippa databasanropet." Johan, Andreas Martin,Lagra ett dataset i en session
Eller finns det andra alternativ som är bättre ?Sv: Lagra ett dataset i en session
Jag vet inte vad du är ute efter men lagra i stället id:t till det recordet du behöver komma åt och när du behöver information, hämta det via det id du håller reda på. Det är en mycket effektivare metod och gör inte att servern slöas ner så mycket heller. Ett databasanrop cachas också, så du tappar inte prestanda på det sättet. Sv:Lagra ett dataset i en session
Sen är det så att det är storleken på informationen som avgör, samt hur ofta den skall användas. Visst kan du mycket väl använda <b>Session</b> till att lagra information på användarnivå, men du kan även använda <b>Cache</b> funktionaliteten som finns i ASP.NET för att cacha - här kommer in fördelar så som att minneshanteraren i .NET kan plocka bort saker från cachen om den beöver frigöra resurser, man anger då vilken prioritet informationen i cachen skall ha vid borttagning. Sen kan man även använda <b>Application</b> objektet för att spara.
Över lag skulle jag rekommondera <b>Cache</b> stödet. Vidare så handlare det också om informationen skall lagras på användarnivå eller inte, samt hur ofta informationen kan komma att tänkas ändra. Ändras den ofta, så kan det vara intressant att köra frågan (gärna då via en Stored Procedure för bästa prestanda) varje gång informationen behöver användas så man är säker på att man arbatar med aktuell data - annars skulle jag cache:a upp den.
I samtliga alternativ (Application, Session och Cache) kan du lagra precis vilken objekt som helst på nästan samma sätt i alla tre fallen. Titta i dokumentationen för hur du stoppar in information, samt hur du läser ut <b>OCH</b> typer informationen till rätt typ när du hämtar den.Sv:Lagra ett dataset i en session
Om jag har en datagrid med massa poster och vill visa dessa på en annan sida också så gör jag alltså ytterligare ett databasanrop ? Finns det inget annat sätt?Sv: Lagra ett dataset i en session
Du kan som Andreas säger lägga det i en cache. Lägg din kontrol i en cache och sätt ett dependecy på den. Sedan kan du hämta denna med nyckel när du vill. ex på din andra sida.
Mvh JohanSv:Lagra ett dataset i en session
Tack för tipsen. Det var inga problem att lägga kontrollen i en session men jag ska nu läsa lite om hur man arbetar med cachen.Sv: Lagra ett dataset i en session
Du har din datagrid in en panel. T.ex.
<asp:panel id=pDefaultDatagrid runat=server>Min datagrid som listar information</asp:panel>
Sen så har du en dold panel
<asp:panel id=pProperties runat=server visible=false>
</asp:panel>
När du klickar på en egenskap in din datagrid tänder du pProperties och släcker pDefulatDatagrid. Nu kan du via .NETs viewstate kan komma åt datagridens data.
En lösning som i alla fall är värd att fundera på. Du kan tom lägga object i viewstate. T.ex.
ViewState["data"] = myObject;Sv:Lagra ett dataset i en session
Sv:Lagra ett dataset i en session
Förutom det Andreas sa så måste du ha stöd för serializering o kovertering för ditt objekt till kod för viewstaten.
Tänk så här när ni bygger, Data som ni MÅSTE ha för en postback läggs i viewstaten helst så lite som möjligt. Data för sessionen som är unik för användaren läggs i en session, helst ett objekt med attribut för att slippa massa nycklar. (föredrar dock att man hämtar datan när man behöver den och inte lagrar så mkt i minnet.) Ex ett UserID skulle räcka genom hela applikationen då detta ID oftast nyttjas för att spåra annan data som man hämtar när den skall hämtas.
I application lägger man sånt som måste delas med alla.
Cache för att regelsätta global information.
Mvh JohanSv: Lagra ett dataset i en session
Men vad är bäst om du ska använda dig av samma object på nästa sida. Är det bättre att göra ett nytt databas uppslag eller är det inte bättre då att återanväda objectet från ViewState och på så sätt slippa databasanropet.
Jag trodde det var det bästa att göra på detta sätt....Sv:Lagra ett dataset i en session
Om det är data som inte kommer att förändras som är statisk skulle jag lagt den i cachen. Alltså .Nets cache klasser inte session eller viewstaten.
Om data kan ändras och inte utgör så stor belastningsskada hade jag säkerligen hämtat upp den varje gång då det kräver mindre kod och jag når mitt målk snabbare. Att bygga kod i tanke på bästa prestandan kan ibland eller oftast kosta mer än vad prestandavinsten är. Det är alltså billigare att köpa en snabbare processor till servern än den utv tid man lägger på att hålla på med prestandabitar där de kanske inte ens behövs.
Mvh JohanSv: Lagra ett dataset i en session
Oj då, tråden lever kvar fortfarande.
Jag använder mig nu av Cache vilket jag tycker fungerar smidigt. Funderar bara på hur jag ska få ut informationen på bästa sätt. Loopar man igenom objekten som jag lagrat i mitt dataset i cachen och tar ut den info jag behöver för just det id jag klickade på i min datagrid ?
/ MartinSv:Lagra ett dataset i en session
Wrappa den aktuella tabellen i ditt dataset (lagra förresten inte ett helt datatset om du bara behöver en tabell) i en <b>DataView</b> och sätt ett <b>RowFilter</b> för att filtrerar fram den aktuella raden/raderna.
Lycka till! =)