La Cache e oggetti singleton

In alcuni nostri progetti potrebbe apparire del codice come quello che segue.

class C
{
   public static C Current
   {
      C c_currentInstance = (C) HttpContext.Current.Cache["c_currentInstance"];
      if(c_currentInstance == null)
      {
         c_currentInstance = new C();
         HttpContext.Current.Cache.Add("c_currentInstance", c_currentInstance, [cut]);
      }
      return c_currentInstance;
   }

}

Ogni chiamata a C.Current implica una ricerca per chiave ed un cast. Ma tutta questa burocraziona algoritmica è evitabile? Si potrebbe fare così:

class C
{
   static c_currentInstance;
   
   public static C Current
   {
      if(c_currentInstance == null)
      {
         c_currentInstance = new C();
         HttpContext.Current.Cache.Add("c_currentInstance", c_currentInstance, [cut], 
           new CacheItemRemovedCallback(OnCacheItemRemovedCallback));
      }
      return c_currentInstance;
   }

   static void OnCacheItemRemovedCallback([cut])
   {
       c_currentInstance = null;
   }

}

...certo le soluzioni illustrate non stanno considerando gli eventuali problemi di chiamate concorrenti, non era infatti questo il problema trattato nel corrente post. Nel caso di necessità comunque ricordate che potete "Implementare Singleton con Volatile" come proposto da Alessandro.

"Freedom Toaster"

Ecco qui una interessante notizia dalla rete. "Freedom Toaster": distributore automatico di software, ovviamente solo Free e OpenSource (FOSS). L'iniziativa nasce dal Sud Africa e la motivazione è "Aiutare gli abitanti di aree con una limitata o nulla disponibilità di ampiezza di banda a procurarsi delle soluzioni senza avere la necessità di connessione alla rete". Sinceramente vedrei anche altre motivazioni oltre a quella qui descritta... anche perchè anche qui e ovunque si ha la banda larga non si potrebbe andare in rete se non si fosse in possesso del software per andarci :-p

[update] Devo essere sincero la cosa non è che mi convince più di tanto.... poi ragionando mi sono fatto una domanda. Quando internet arrivò in italia distribuivano dei CD gratis con ogni ben di dio per connettersi alla rete. Perchè in Africa fanno un distributore dove il CD li devi mettere il consumatore?

Nell'articolo infatti si legge: "Di fatto impiega uno schermo sensibile al tatto dove selezionare e ottenere gratuitamente una ventaglio di strumenti FOSS (da sistemi operativi Linux a software applicativo) inserendo al suo interno un CD vergine."

Non sarebbe più semplice fare dei distributori di CD già pieni?

«novembre»
domlunmarmergiovensab
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910