Problème à l'aide de HttpRuntime.Cache

Suis à l'aide de la suite .net code pour ajouter des objets à cache:

public static void Add<T>(string key, T dataToCache)
{
    try
    {
        ApplicationLog.Instance.WriteInfoFormat("Inserting item with key {0} into Cache...", key);

        HttpRuntime.Cache.Insert(
            key,
            dataToCache,
            null,
            DateTime.Now.AddDays(7),
            System.Web.Caching.Cache.NoSlidingExpiration);
    }

    catch (Exception ex)
    {
        ApplicationLog.Instance.WriteException(ex);             
    }
}

et voici mon code pour récupérer des valeurs de cache:

public static T Get<T>(string key) 
{   
    try
    {                
        if (Exists(key))
        {
            ApplicationLog.Instance.WriteInfoFormat("Retrieving item with key {0} from Cache...", key);

            return (T)HttpRuntime.Cache[key];
        }
        else
        {
            ApplicationLog.Instance.WriteInfoFormat("Item with key {0} does not exist in Cache.", key);
            return default(T); 
        }
    }
    catch(Exception ex)
    {
        ApplicationLog.Instance.WriteException(ex);
        return default(T); 
    }
}


public static bool Exists(string key)
{
    bool retVal = false;
    try
    {
        retVal= HttpRuntime.Cache[key] != null;
    }
    catch (Exception ex)
    {
        ApplicationLog.Instance.WriteException(ex);
    }
    return retVal; 
}

Mais je trouve que, après toutes les 2 minutes,l'objet mis en cache valeur null résultant en tirant cette valeur à partir de la base de données à nouveau.

Ce qui me manque ici?

Je pense que le code qui utilise la mémoire cache serait plus pertinente. Par exemple, êtes-vous en ajoutant la même clé pour le cache plusieurs fois?
Parce qu'il est l'aide de l'insert, c'vais mettre à jour l'article si elle est déjà dans le cache.
Est votre ASP.NET configuration des paramètres par défaut? Par exemple, est l'ASP.NET jeu de la corbeille pour une raison quelconque, après une certaine quantité de mémoire est allouée, ou le temps a passé? Comment au sujet de vos paramètres de pool d'applications? Fondamentalement, vous êtes sûr que le HttpRuntime n'est pas en cours de redémarrage?
Notez qu'une condition de concurrence existe dans votre méthode Get (), étant donné que le cache peut être mis à jour entre la Exists() appel et HttpRuntime.Cache[key]. Voir le dernier point ici: stackoverflow.com/a/11432864/188926

OriginalL'auteur user74042 | 2009-06-22