我已经与ObjectCache
合作了一段时间,并且在使用一段时间后我遇到了一些问题。
在浏览器中进行一些刷新后ObjectCache
正在清除缓存的情况发生了什么,它发生在我的机器,开发人员和生产应用程序中。
这是我的班级(全部):
using System;
using System.Runtime.Caching;
namespace autoSCORE.Utilidade.GerenciadorCache
{
/// <summary>
/// Gerencia a Criação, Atualização e Exclusão de Cache.
/// </summary>
/// <typeparam name="T">Objeto, do tipo <see cref="T"/>, preenchido com o Tipo de Conteúdo a ser guardado no Cache.</typeparam>
public static class Cache<T> where T : class
{
/// <summary>
/// Singleton do objeto, do tipo <see cref="System.Runtime.Caching.ObjectCache"/>.
/// </summary>
private static ObjectCache memoryCache = MemoryCache.Default;
/// <summary>
/// objeto, do tipo <see cref="System.Runtime.Caching.CacheItemPolicy"/>., com as Políticas do Cache.
/// </summary>
private static CacheItemPolicy cacheItemPolicy = null;
/// <summary>
/// Cria o Cache do Item desejado.
/// </summary>
/// <param name="chave">Objeto, do tipo <see cref="System.String"/>, preenchido com a Chave desejada.</param>
/// <param name="conteudo">Objeto, do tipo <see cref="T"/>, preenchido com o Conteudo desejado.</param>
/// <param name="persistir">Objeto, do tipo <see cref="System.Boolean"/>, preenchido com "True", para extender por 10 dias, ou "False", para extender por 60 minutos.</param>
public static void Adicionar(string chave, T conteudo, bool persistir)
{
try
{
cacheItemPolicy = new CacheItemPolicy();
cacheItemPolicy.Priority = CacheItemPriority.Default;
cacheItemPolicy.SlidingExpiration = persistir ? new TimeSpan(10, 0, 0, 0) : new TimeSpan(1, 0, 0);
memoryCache.Set(chave, conteudo, cacheItemPolicy);
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// Retorna o Item, do Cache, desejado.
/// </summary>
/// <param name="chave">Objeto, do tipo <see cref="System.String"/>, preenchido com a Chave desejada.</param>
/// <returns>Objeto, do tipo <see cref="T"/>, preenchido com o Conteudo recuperado.</returns>
public static T Recuperar(string chave)
{
try
{
if (memoryCache.Contains(chave))
{
var objectT = (T)memoryCache[chave];
if (objectT == null) return default(T);
System.Reflection.MethodInfo newInstanceOfObjectT =
objectT.GetType().GetMethod("MemberwiseClone", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (newInstanceOfObjectT == null) return default(T);
return (T)newInstanceOfObjectT.Invoke(objectT, null);
}
else
{
return default(T);
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// Atualiza o Item, no Cache, desejado.
/// </summary>
/// <param name="chave">Objeto, do tipo <see cref="System.String"/>, preenchido com a Chave desejada.</param>
/// <param name="novoConteudo">Objeto, do tipo <see cref="T"/>, preenchido com o novo Conteudo desejado.</param>
public static void Atualizar(string chave, T novoConteudo)
{
try
{
if (memoryCache.Contains(chave))
{
var content = (T)memoryCache[chave];
content = novoConteudo;
memoryCache[chave] = content;
}
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// Remove o Item desejado.
/// </summary>
/// <param name="chave">Objeto, do tipo <see cref="System.String"/>, preenchido com a Chave desejada.</param>
public static void Remover(string chave)
{
try
{
if (memoryCache.Contains(chave))
{
memoryCache.Remove(chave);
}
}
catch (Exception ex)
{
throw ex;
}
}
}
}
谢谢和最诚挚的问候, Rodrigo Lemela Duarte