Implementare il “Lazy Loading”

Tempo fa avevo realizzato un HTTP Handler, per cambiare dinamicamente l’header del mio blog per maggiori informazioni sul codice e sulle impostazioni che vanno inserite nel Web.config vedi questo post.

Nel mio caso volevo implementare un sistema che mi cambiava in automatico l’immagine d’intestazione. La questione principale era realizzare un’implementazione del pattern “Lazy Loading”.

Il Lazy Loading è un design pattern”, molto utile quando la lettura dei dati richiede un notevole consumo di risorse.
Ho utilizzato un file .xml nel quale vengono memorizzati i percorsi delle immagini; è noto che l’accesso ai dati memorizzati su file .xml è piuttosto lento.

Il Lazy Loading verifica lo stato dei dati che si vogliono utilizzare, se i dati sono disponibili li restituisce come outoput, altrimenti legge i dati richiesti e li memorizza per l’accesso successivo (vedi codice).

   1:  private List<String> GetBannerImages(HttpContext context)
   2:   {
   3:              if ((context.Session["banner"] == null))
   4:              {
   5:                  XmlDocument oXml = new XmlDocument();
   6:                  oXml.Load(context.Server.MapPath("~/App_Data/Banner.xml"));
   7:   
   8:                  XmlNodeList oBannerItemList = oXml.SelectNodes("Banner/Items/Item");
   9:   
  10:                  List<String> oBannerImageList = new List<string>();
  11:   
  12:                  for (int i = 0; i < oBannerItemList.Count; i++)
  13:                      oBannerImageList.Add(context.Server.MapPath(oBannerItemList.InnerText));
  14:   
  15:                  context.Session["banner"] = oBannerImageList;
  16:              }
  17:              return (List<String>)context.Session["banner"];
  18:   }

Per memorizzare i percorsi delle immagini ho utilizzato la sessione, in un HTTP Handler per utilizzare la sessione è necessario implementare l’interfaccia IRequiresSessionState”.

   1:  public class BannerHttpHandler : IHttpHandler, IRequiresSessionState
Published Thursday, November 22, 2012 8:23 PM by MADIL
Powered by Community Server (Commercial Edition), by Telligent Systems