Jag har en fundering angående dataset och minne Hej Johan. För det första, hur prestandakrävande är sidan? Hur ofta måste fräsht data hämtas? Om du kör .net kan du kasta på ett cache-direktiv på sidan som gör samma sak. Om du lägger data i ett cache-objekt går det ju också, men om du lägger det på sessionsnivå börjar det ta plats, speciellt om många personer besöker sidan. Jag hade tänkt använda dataset till att lagra data som är statiskt under hela sessionen och som inte behöver uppdateras. Tex kategorier och subkategorier i ett textpubliceringssystem. Om du lägger det i exempelvis en usercontrol så kan du cacha den sidan, och på så sätt när du drar in den på den vanliga sidan så ligger alltså denna usercontrol cachad, säg 10000000000 minuter :-) Johan, Johan, Tack för ditt kreativa låånga svar. Dataset och Session
Det är smidigt att behålla sitt dataset genom sessionen genom att spara det i en session-variabel, men hur mycket minne drar det av servern?
Och hur mycket prestanda tjänar man genom detta sätt jämfört med att skapa ett nytt DS och fylla det vid varje sidvisning där det behövs.
Kan någon prida lite ljus?
Undrar JohanSv: Dataset och Session
Sv:Dataset och Session
Jag ska titta på cache-varianten. Jag trodde det gällde hela sidan och inte enskilt data Jag ska plugga lite ;)
JohanSv: Dataset och Session
Sv: Dataset och Session
Sedan jag börjare med utveckling för många årsedan så var jag alltid förvånad över hur mycket prat det var om prestanda. jag kommer från en liten annorlunda bakgrund än de flesta programmerare (tror jag i alla fall.) Jag kommer från reklamsidan där det viktiga var vad perosonen såg och hur han påverkas av det hela. Man kom på smarta fuck för att locka personerna till saker de egentligen inte ville ha eller fick dem att se nått de egentligen inte såg etc... Låter konstigt kanske :-)
Samma syn hade/har jag på prestanda. Jag är rätt allergisk mot dem som enbart tänker prestande, varför? tja det hela handlar mer om man man tjänar på det än vad det kostar. Prestanda optimeringar är dyrt när det gäller i mjukvaruform medans i hårdvara är det billigt. Det man bör tänka på är vinner jag på att lägga x antal timmar på superoptimerat system? Det sägs ju vara så viktigt?
Jag har vart aktiv i en del projekt där prestanda kvraven var högre än kodkvalitén och underhållskraven för framtiden, hellre svårhanterad kod med hög prestanda än lätthanterlig kod med lagom prestanda. När man undrar vilka det är som skall köra systemen får man antingen höra den lokala användaren alltså en person eller kanske 10-100 st mot en och samma applikation. Så länge det är en person behöver man inte lägga onödiga resurser på prestandan oftast ger normal kod och hantering den en precis perfelkt lagom prestanda mot en slutanvändare. 10-100 st användare är heller inte så mkt. Det är enklare att bygga sin applikation bra och modulär och sedan i slutet optimera om det skulle bli problem med rutinerna man byggt upp. Även då är det även lättare att se vart i rutinerna finns flaskhalsen med trevliga progam som QA Time.
Vad jag egentligen vill säga är att det är viktigare att fokusera på ens grundmodell än på prestandan.
Man har tre val men kan bara välja mellan två. Prestanda, Kostnad eller Kvalié. Jag väljer Kostnad och Kvalité i första hand.
I ditt fall med att spara undan en massa data kan vara lika onödigt som nödvändigt. Iblöand räcker det att du har ett ID undansparat i en session och när viss info skall presenteras hämtar du denna via det ID du har.
Det är många som sparar ner fulla användaruppgifter i sessioner när man loggar in i system för att sedan enklet hämta dem ur minnet när man skall presentera sin personliga sida. Tanken är god helt klart, men hur ofta besöker man sin personliga sida? Jag anser inte så ofta att det är värt at lägga tid på såsan cachehantering pga prestandaskäl.
Så den info du vill lagra, är det nått du ständigt konstant kommer att presentera? Är det mer än 100 st som samtidigt kommer använda din programvara? Om inte så ser jag ingen vits med att lägga en massa tid på att lägga data i minnet för att senare snabbt komma åt det. Då är det viktigare att du lägger tid på en modell som du sedan om prestanda skulle bli ett problem kunna byta ut.
Ex. Gör en klass som hämtar viss info. User.GetByName(string name) denna metod går mot en DB hämtar alla infromation ang användaren och lägger det i en User klass som du returnerar (eller ett dataset med användaruppgifter via kolumner).
Helt plötsligt börjar det bli en flaskhals att hämta uppgifterna på detta sätt, tja då kan du enklet ändra din GetByName metod så den först går mot en objekt cache för att se om objektet redan laddats in och plocka den och få en bra prestandavinst.
Oj nu blev det längre än jag hade tänkt skriva, hoppas jag fick fram en liten tankegång i alla fall.
Mvh JohanSv:Dataset och Session
Jag håller med dig om att det inte alltid är så viktigt att fokusera på att prestandan är 100%! Ofta är det viktigare att programmera konsekvent - så att när flskhalsen uppstår - man enkelt kan uppdatera koden.
Jag jobbar precis som du föreslår med en data-klass som innehåller en rad sköna funktioner för både uppdatering och hämtning av data - både från databaser och XML.
Det jag var ute efter i det här fallet var att få koll på hur mycket minne det går åt att lagra ett dataset i en session och som jag trodde så kostar det mer än det smakar.
Tack för dina synpunkter!
Johan