Link sponsorizzati

Caching di dati. Alziamo le performance del nostro sito

Articolo scritto da Giuseppe Marchi

In un sito con pagine che effettuano varie operazioni ogni volta che vengono caricate, soprattutto operazioni di accesso ai dati su di un database, è molto utile applicare un certo tipo di politiche di caching dei dati, in modo tale da aumentare le prestazioni di ogni pagina del sito.

Il .NET Framework ci permette di accedere alla cache di ogni pagina tramite l'oggetto Cache del namespace System.Web.Caching; questo oggetto può essere sfruttato come contenitore dei dati che vengono richiesti dalla pagina per un certo periodo di tempo.

(L'articolo continua più sotto...)

Vediamo un esempio di utilizzo della cache di una pagina per salvare i risultati di una query ed evitare (per un periodo di tempo ben preciso) che la base di dati sia accessa ad ogni richiesta della pagina.

C#

protected System.Web.UI.WebControls.Repeater rep;
private OleDbConnection conn = null;
private OleDbCommand cmd = null;

public void Page_Load(object sender, EventArgs e)
{
  DataTable dt = (DataTable)this.Cache.Get("LinksDataTable");
  if(dt == null)
  {
    //Se quell'oggetto non è presente in cache
    //faccio la richiesta al database
    using(conn = new OleDbConnection("stringa di connessione ...");
    {
      using(cmd = new OleDbCommand("SELECT * FROM Links", conn);
      {
        OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
        DataSet ds = new DataSet();
        adapter.Fill(ds, "Links");
        dt = ds.Tables["Links"];
        //Aggiungo la DataTable creata alla cache della pagina
        this.Cache.Insert("LinksDataTable", dt);

        this.rep.DataSource = dt;
        this.rep.DataBind();
      }
     }
   }
   else
   {
     //Se quell'oggetto è presente il cache
     //stampo i dati
     this.rep.DataSource = dt;
     this.rep.DataBind();
   }
}

VB.NET
Protected WithEvents rep As System.Web.UI.WebControls.Repeater
Private conn As OleDbConnection
Private cmd As OleDbCommand

Public Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load

  Dim dt As DataTable = CType(this.Cache.Get("LinksDataTable"), DataTable);
  If dt Is Nothing

    'Se quell'oggetto non è presente in cache
    'faccio la richiesta al database
    Dim conn As New OleDbConnection("stringa di connessione ...")
    Dim cmd As New OleDbCommand("SELECT * FROM Links", conn)
    Dim adapter As New OleDbDataAdapter(cmd)
    Dim ds As New DataSet()
    adapter.Fill(ds, "Links")
    dt = ds.Tables("Links")
    'Aggiungo la DataTable creata alla cache della pagina
    Me.Cache.Insert("LinksDataTable", dt);

    Me.rep.DataSource = dt;
    Me.rep.DataBind();

  Else
    'Se quell'oggetto è presente il cache stampo i dati
    Me.rep.DataSource = dt
    Me.rep.DataBind()
  End If

End Sub
La durata della cache di ogni pagina può essere definita in due modi, o tramite la direttiva @OutputCache da inserire subito dopo la direttiva @Page della pagina in questione
<%@ OutputCache Duration="60" VaryByParam="*" %>
oppure tramite l'aggiunta di una nuova sezione nel file web.config dell'applicazione web
<configuration>
  <configSections>
    <section name="CacheSettings" 
      type="System.Configuration.NameValueFileSectionHandler, System, 
      Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
    />
  </configSections>
  <CacheSettings>
    <add key="EnableCaching" value="true" />
    <add key="RequireKeyDefinitionInConfig" value="true" />
    <add key="DefaultCacheDurationUnits" value="seconds" />
    <add key="DefaultCacheDurationValue" value="60" />
  </CacheSettings>
</configuration>
che ci permette di specificare parametri per la cache di tutte le pagine del sito, oppure anche per ogni singolo oggetto che pensiamo di inserirci.

Io ho utilizzato questa tecnica in molte delle pagine e dei server control psenti in questo sito e devo dire che le pstazioni delle richieste di ogni pagina sono davvero migliorate.

Nella stessa categoria...
E-Learning
Corso ASPCorso ASP
Corso completo per la creazione di siti Web dinamici. A partire da 39 €.
Corso ASP.NETCorso ASP.NET
Corso completo per la creazione di applicazioni Web. A partire da 49 €.
Corso SQL e DatabaseCorso SQL e Database
Creazione e gestione di database relazionali. A partire da 39 €.
Link sponsorizzati