Uso de Caching en Windows utilizando System.Web.Caching - Jorge Serrano - MVP Visual Developer - Visual Basic

Uso de Caching en Windows utilizando System.Web.Caching

Me encuentro en un blog de Microsoft un interesante ejemplo de como utilizar el ensamblado System.Web.Caching en aplicaciones Windows para trabajar con objetos dentro de la caché, recuperarlos y detectar cuando están vacíos.

Algo que no indica la entrada a la que hago relación y que tampoco tiene más misterio, es que para eliminar un objeto de la caché, basta con utilizar el método Remove de la clase System.Web.HttpRuntime mediante el uso de System.Web.HttpRuntime.Cache.Remove(nombreClaveCache).

Pero ojo, ¿es bueno o recomendable utilizar este ensamblado en ambientes Windows? (más abajo una breve discusión sobre ello).

Un ejemplito de ese artículo pasado a C# y con la posibilidad de eliminar el objeto de la caché es el siguiente:

Tres controles Button y un control TextBox en un WinForm.

Referencia al ensamblado System.Web en el proyecto.

...
using System.Web.Caching;

namespace Cache
{
    
public partial class MainForm : Form
    {

        
private const string CacheKey = "testcache";
        
private const double CacheDurationSeconds = 10;

        ...

        
private void button1_Click(object sender, EventArgs e)
        {
            
DateTime cacheExpiration = DateTime.Now.AddSeconds(CacheDurationSeconds);
            System.Web.
HttpRuntime.Cache.Insert(CacheKey, 
                                                
this.textBox1.Text, 
                                                
null
                                                cacheExpiration, 
                                                System.Web.Caching.
Cache.NoSlidingExpiration);
            
MessageBox.Show(this.textBox1.Text +
                            
" has been inserted into the cache.  It will expire at " +
                            cacheExpiration.ToLongTimeString());
        }

        
private void button2_Click(object sender, EventArgs e)
        {
            
object cacheValue = System.Web.HttpRuntime.Cache.Get(CacheKey);
            
if (cacheValue == null)
            {
                
MessageBox.Show("Nothing in the cache");
            }
            
else
            {
                
MessageBox.Show(cacheValue.ToString() +
                                
" - current time: " + 
                                
DateTime.Now.ToLongTimeString());
            }
        }

        
private void button3_Click(object sender, EventArgs e)
        {
            System.Web.
HttpRuntime.Cache.Remove(CacheKey);
        }


    }
}

El caso es que este ejemplo funciona perfectamente, pero como decía al principio del mismo, ¿es una buena práctica utilizar este ensamblado específicamente preparado para ambientes Web en ambientes Windows?.

Según la Knowledge Base de Microsoft, el objeto System.Web.Caching.Cache no está preparado para ser utilizado en Microsoft .NET Framework 1.0 y .NET Framework 1.1.

¿Y en Microsoft .NET Framework 2.0?.

La respuesta es sí, sí está preparado, pero como todo... con precaución amigo conductor, porque aunque sí se puede usar, Microsoft no recomienda su uso como puede desprenderse de la KB comentada.

En su caso, Microsoft apuesta por Caching Application Block por su amplio grado de personalización.

Resumen

En resumidas cuentas, el uso de esta técnica en aplicaciones Windows, no es recomendable para aplicaciones desarrolladas en .NET Framework 1.0 y .NET Framework 1.1, pero sí podría ser utilizado en aplicaciones desarrolladas en .NET Framework 2.0, pero... con cuidadín.

Referencias:

Enlace Web: Acceso al artículo (en inglés)

Enlace Web: Msdn Microsoft - Información de System.Web.Caching (en inglés)

Enlace Web: Knowledge Base (System.Web.Caching.Cache no está preparado para utilizarse en .NET Framework 1.0 y 1.1) (en inglés)

Enlace Web: Caching Application Web (en inglés)

Published 21/2/2009 12:25 por Jorge Serrano
Comparte este post:

Comentarios

Saturday, February 21, 2009 1:03 PM por José M. Alarcón Aguín

# re: Uso de Caching en Windows utilizando System.Web.Caching

Hola Jorge:

De hecho yo ya escribí sobre este tema hace casi dos años en mi blog:

www.jasoft.org/.../PermaLink,guid,d2e9995d-f696-4262-9c08-540a15246100.aspx

Saludos!!

JM

Saturday, February 21, 2009 1:12 PM por Jorge Serrano

# re: Uso de Caching en Windows utilizando System.Web.Caching

Muchas gracias José.

Hay tanto información que a veces uno ni se acuerda.

Me lo acabo de leer (refrescar) y es muy interesante.

Gracias por compartirlo, le vendrá muy bien a más de uno. :-)

Saturday, February 21, 2009 3:59 PM por El Bruno

# re: Uso de Caching en Windows utilizando System.Web.Caching

pues my 2 cents seria recomendar que si estamos en un entorno "no web" no utilicemos cosillas del mundo web, EntLib es una opcion ya que provee un appblock de caching y se puede utilizar desde cualquier entorno :D

Saludos

Saturday, February 21, 2009 10:11 PM por Jorge Serrano

# re: Uso de Caching en Windows utilizando System.Web.Caching

Sabía yo que Bruno iba a decir algo respecto a App Block (estuve a punto de ponerlo en la entrada). :-)

Aún y así, no termina de gustarme el App Block. :-)))

Monday, February 23, 2009 5:49 PM por Ibon Landa

# re: Uso de Caching en Windows utilizando System.Web.Caching

Yo lo único utilizaría la hora UTC ( utcNow ) en lugar de Now.

Thursday, April 29, 2010 9:30 AM por Jorge Serrano

# re: Uso de Caching en Windows utilizando System.Web.Caching

Hola Ibon, totalmente de acuerdo contigo.

Lo de la hora UTC lo recogí en otra entrada (lo que ponía aquí era un ejemplo);

geeks.ms/.../trabajando-con-fechas-y-horas-locales-y-fechas-y-horas-utc-en-net.aspx

Un saludo.