L'oggetto Cache di ASP.NET

2 pagine in totale: <<Indietro 1 [2]

Un uso pratico: le notizie di Punto Informatico

Abbiamo visto molta teoria su questo oggetto: ora cerchiamo di applicare le grandi funzionalità dell'oggetto Cache ad un esempio che può tornare molto utile.

Molti di voi sanno che è possibile inserire le notizie da fonti esterne, moltissime volte in formato XML, direttamente nel proprio sito.
In questo esempio vedremo come mostrare le news di Punto Informatico, ma il discorso può essere esteso a qualsiasi feed esterno.

Esisterà già probabilmente una versione .NET, ma senza utilizzare l'oggetto Cache è necessario scaricare il file XML per ogni richiesta, parserizzarlo e mostrare le notizie: un lavoro non da poco se si considera la ricezione del file XML da remoto e soprattutto inutile se si considera che le notizie non cambiano certo al ritmo di una al secondo.

Ecco che ci viene in aiuto l'oggetto Cache: le notizie cambiano una volta al giorno perciò noi una volta al giorno riceveremo le notizie e le salveremo in Cache nel modo più semplice possibile, in modo da rendere facile e veloce la visualizzazione delle stesse.

Inseriremo il nostro codice nel file global.asax in modo da creare una nuova funzione che gestisce la scadenza della chiave. In più nell'evento Application_Start richiameremo la funzione che preleva le notizie al primo avvio della nostra applicazione web:

<%@ Application language="VB" Classname="App" debug="true" %>
<%@ Import Namespace="System.Xml" %>
<%@ Import Namespace="System.Data" %>

<SCRIPT runat="server">

  Public Sub RemovedCallback(k As String, v As Object, r As CacheItemRemovedReason)
     ' questa funzione parte alla scadenza della chiave
     SetNewsPi()
  End Sub

  Private Sub SetNewsPi()
     'carico nel notizie di Punto Informatico in un oggetto XmlDocument
     Dim NewsPi as New XmlDocument()
     NewsPi.Load("http://www.punto-informatico.it/fader/pixml.txt")

     'prelevo solo i nodi di nome item
     Dim Items as XmlNodeList=NewsPi.GetElementsByTagName("item")
     Dim Item as XmlNode

     ' creo un nuovo DataTable che riempirò
     ' per un facile utilizzo nell'applicazione web
     dim Notizie as new DataTable("Notizie")
     ' aggiungo le due colonne di cui necessito
     Notizie.Columns.Add("titolo",Type.GetType("System.String"))
     Notizie.Columns.Add("link",Type.GetType("System.String"))

     Dim Riga as DataRow

     For Each Item in Items
       ' istanza della nuova riga
       Riga=Notizie.NewRow()

       ' aggiungo i valori ai campi
       Riga("titolo")=Item.FirstChild.InnerText
       Riga("link")=Item.ChildNodes(1).InnerText

       ' aggiungo la riga
       Notizie.Rows.Add(Riga)
     Next

     ' delegate puntato alla funzione che gestisce la scadenza della cache
     dim onRemove as New CacheItemRemovedCallback(AddressOf Me.RemovedCallback)

     ' inserisco il DataTable nella cache
     HttpRuntime.Cache.Insert("newsPi",Notizie,Nothing,DateTime.Parse("08:00").AddDays(1), TimeSpan.Zero, CacheItemPriority.Normal, onRemove)

     ' distruggo gli oggetti dal punto di vista logico
     NewsPi=Nothing
     Items=Nothing
     Item=Nothing

  End Sub

  Sub Application_Start(Sender As Object, E As EventArgs)
     SetNewsPi()
  End Sub

</SCRIPT>

Con l'aiuto dei commenti il codice è di facile comprensione. Al primo avvio dell'applicazione web parte la funzione SetNewsPi che preleva le notizie e le salva in un DataTable pronto ad essere visualizzato con un DataList o un DataGrid. Il DataTable poi viene salvato nella Cache impostando come scadenza le 08:00 del giorno successivo, giorno in cui ci saranno le nuove news. Alla scadenza, verrà richiamata la funzione RemovedCallBack che a sua volta reimposta la chiave nella Cache.

Conclusioni

Con questo esempio si può vedere quanto può risultare utile la nuova classe Cache in situazioni più disparate. Si potrebbe usare in unione con i web services, per esempio, per ottenere il cambio euro-dollaro e migliorare di conseguenza le performance dell'applicazione web, evitando richieste consecutive al web service.

Anche se non avete bisogno delle funzionalità più avanzate della classe Cache, è comunque preferibile usarlo perché la gestione automatica di sincronizzazione per l'accesso rende sicuramente più ottimizzata l'applicazione web.

L'oggetto Application infatti con il metodo Lock blocca di fatto tutte le richieste di modifica dell'oggetto e le accoda con il risultato di rendere maggiore l'attesa dell'utente.

Il discorso può essere fatto anche per piccole quantità di dati prelevati da database: si evita che venga fatta una richiesta per ogni effettiva richiesta della pagina, migliorando le performance e la scalabilità.

Attenzione a non abusarne, però, perché questo tipo di variabile occupa memoria: dunque un uso intelligente e parsimonioso, non certo esasperato.

Approfondimenti

<% end if %>

2 pagine in totale: <<Indietro 1 [2]

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.


TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC