Artiklar » .NET 4.0 » Använd Cache i ASP.NET Web Pages

 
 

Använd Cache i ASP.NET Web Pages

Författare: vimpyboy
Datum: den 6 juli 2010
Antal lästa: 3261
Ej stjärnmärkt

Webbsidor kan ofta vara väldigt komplexa och ha mycket information som hämtas från olika källor. Nyheter på sidan kan hämtas från en databas, nyheter från andra sidor hämtas med RSS, aktiekurser kanske hämtas med en Web Service osv. Då alla anrop tar tid att göra så kan det leda till att sidan blir seg när man får många besökare. För att lösa det kan man använda Cache, vilket gör att man bara behöver hämta informationen med olika mellanrum. Sätter vi cachen till 20 minuter så kommer informationen att hämtas från källan var 20:e minut, och resterande tid hämtas den från cachen som ofta lagrar informationen direkt i minnet.

I ASP.NET Web Pages finns det en helper som gör det möjligt att snabbt och enkelt använda cache.

De anrop som finns är:
•    WebCache.Get(string key)
o    Hämtar värdet med nyckeln som skickas in.
•    WebCache.Set(string key, object value[, int minutesToCache][bool slidingExpiration]
o    Sätter värdet för den angivna nyckeln. De valfria parametrarna minutesToCache och slidingExpiration avgör hur länge värdet skall cachas samt om det ska ökas vid varje anrop
•    WebCache.Remove(string key)
o    Tar bort det cachade värdet

Det vi ska göra nu är att vi vid varje anrop ska se om ett datum finns i cachen. Om det finns så ska vi skriva ut det, om inte så sparar vi det i cachen och skriver sedan ut det. Vi ska även ha en knapp som tar bort värdet.

Den färdiga koden för hela sidan ser ut så här:

Kod:
@{
  if (IsPost)
  {
  WebCache.Remove("date");
  }

  DateTime date = DateTime.Now;
  DateTime cachedDate = DateTime.Now;

  if (WebCache.Get("date") != null)
  {
  cachedDate = WebCache.Get("date").ToString().AsDateTime();
  }
  else
  {
  WebCache.Set("date", date, 3);
  }
}

<!DOCTYPE html>
<html>
  <head>
  <title>ASP.NET Web Pages Cache</title>
  </head>
  <body>
  <p>
  Tid i cachen: @cachedDate.ToLongTimeString()
  </p>
  <p>
  Tid nu: @date.ToLongTimeString()
  </p>
  <p>
  <form action="/Cache" method="post">
  <input type="submit" value="Rensa cachen" />
  </form>
  </p>
  </body>
</html>



Ser vi på koden här så kan vi se att vi först ser om en postning har gjorts. Då vi först besöker sidan så är det inte fallet. Sedan skapas två variabler upp, en med aktuell tid, och en med cachade tiden, vilket är den aktuella om ingen finns än.

Nästa steg är att se om det finns något i cachen. Vi hämtar värdet för nyckeln ”date” och ser om det är null. Om värdet finns så sparar vi ned det som ett DateTime-objekt med extension-metoden AsDateTime(), vilken kan användas på alla strängar i ASP.NET Web Pages. Om det inte finns något värde i cachen så sparar vi ned värdet i tre minuter.

När all kod på toppen har körts så har vi två värden – den aktuella tiden och den cachade tiden. På sidan skriver vi ut båda värdena. Om vi sedan uppdaterar sidan så kan vi se att det cachade värdet är precis detsamma som det vi nyss hade som aktuella tiden, medan den aktuella tiden är uppdaterad.

För att det cachade värdet ska uppdateras så får vi antingen vänta tre minuter, eller klicka på knappen som postar tillbaka till sidan och då rensar cachen, vilket gör att den återigen får det aktuella värdet.

Förutom enkla typer som DateTime kan vi även lagra mer komplexa objekt, som till exempel en lista med nyheter på sidan, vilket gör att vi inte behöver hämta den mer än nödvändigt.

Det är dock viktigt att tänka på att inte cacha allt alltför länge. Sådant som behöver uppdateras väldigt ofta kanske vi cachar väldigt kort tid, medan sådant som uppdateras väldigt sällan kan cachas under en längre tid.
 
     

  » Logga in  
 
Användarnamn

Lösenord

 
     

  » Bli medlem  
  Bli medlem på ASPsidan!  
     

     
  Microsoft  
     

  » Partners  
  Comsolvia  
     
  » ANNONS  
  ingen annons än  
     

  » Senast online  
  Endast för inloggade  
  Antal inloggade: 1  
     

Copyright © 2007 www.ASPsidan.se
ingen sponsrar längre ASPsidan med Dedikerad Server
ASPsidan RSS
   
 XHTML / CSS
Det tog 0,0313 sekunder att ladda sidan