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: Caching Application Web (en inglés)
6 Responsesso far
Hola Jorge:
De hecho yo ya escribí sobre este tema hace casi dos años en mi blog:
http://www.jasoft.org/blog/PermaLink,guid,d2e9995d-f696-4262-9c08-540a15246100.aspx
Saludos!!
JM
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. 🙂
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 😀
Saludos
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. :-)))
Yo lo único utilizaría la hora UTC ( utcNow ) en lugar de Now.
Hola Ibon, totalmente de acuerdo contigo.
Lo de la hora UTC lo recogí en otra entrada (lo que ponía aquí era un ejemplo);
http://geeks.ms/blogs/jorge/archive/2009/10/08/trabajando-con-fechas-y-horas-locales-y-fechas-y-horas-utc-en-net.aspx
Un saludo.