Question

Bien que j'ai spécifié une clé unique, il semble que le code suivant renvoie une valeur pour 5 demandes, puis une autre pour le couple suivant, puis revienne à la valeur enregistrée dans la demande d'origine et continue jusqu'à ce qu'il y ait 10 différents objets tous stockés sous la même clé. Il semble alors presque aléatoire laquelle de ces valeurs sera renvoyée du cache.

string strDateTime = string.Empty;
string cachename = "datetimeexample";
object cachedobject = HttpRuntime.Cache.Get(cachename);
if (cachedobject != null)
    strDateTime = (string)cachedobject;
else
{
    strDateTime = DateTime.Now.ToString();
    HttpRuntime.Cache.Insert(cachename, strDateTime, null, DateTime.MaxValue, TimeSpan.FromDays(10), CacheItemPriority.NotRemovable, null);
}
Response.Write(strDateTime +"        keys:"+ HttpRuntime.Cache.Count);

Très confus, est-ce à cause du filetage ou autre chose?

Était-ce utile?

La solution

Ignorant la possibilité d'une batterie de serveurs et d'un équilibrage de charge, ce problème peut être provoqué par l'exécution du pool d'applications en tant que web-garden . Pour citer la section pertinente de MSDN:

  

Parce que les jardins Web permettent l’utilisation de   plusieurs processus, chaque processus   avoir sa propre copie de l'application   état, état de la session en cours,   les caches et les données statiques. Jardins Web   ne devrait pas être utilisé pour tous   applications, surtout si elles ont besoin   maintenir l'état. Assurez-vous de   comparer les performances du   demande avant de décider si   Le mode jardin Web est approprié.

Cela fera apparaître comme si la mise en cache stockait plusieurs valeurs pour la même clé, avec des entrées en double dans le cache.

Pour résoudre ce problème dans IIS 7, ouvrez les Paramètres avancés du pool d'applications et définissez Nombre maximal de processus de travail sur 1. Pour IIS 6, consultez la section Article MSDN (avec jolis screenshots).

Avec 8 mois de retard, je réponds à cette question car je l’avais trouvée bien avant que je trouve cet article décent sur les pièges du jardin Web . Espérons que cette réponse permettra aux futurs chercheurs d’économiser beaucoup de temps. :)

Autres conseils

Votre clé de cache est toujours 'datetimeexample', par conséquent, vous aurez toujours un objet dans le cache; et vous recevrez toujours cet objet en retour.

Je ne suis pas tout à fait sûr de ce que vous essayez d'accomplir ici, en ce qui me concerne, cela se comporte exactement comme il est censé le faire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top