C # HttpRuntime.Cache.Insert () Ne contient pas de valeur mise en cache
Je suis en train de mettre en cache un prix de valeur à l'aide de HttpRuntime.Le Cache.Insert(), mais n'apparaît que pour conserver la valeur pour un couple d'heures ou de quelque chose avant de l'effacer. Ce que je fais mal? Je veux que la valeur de rester dans la mémoire cache pour 3 jours.
HttpRuntime.Cache.Insert(CacheName, Price, null, DateTime.Now.AddDays(3), TimeSpan.Zero);
source d'informationauteur mike
Vous devez vous connecter pour publier un commentaire.
Réponse courte
Votre pool d'applications ou de site web est en cours d'arrêt trop tôt. Prolonger le délai d'inactivité sur le site, étendre l'application de la piscine de vie de la piscine de l'exploitation du site. Augmenter l'allocation de mémoire et limite la demande.
Réponse complète
Si vous souhaitez savoir quand et pourquoi quelque chose est supprimé du cache, vous devez vous connecter à l'élément de suppression à l'aide de la CacheItemRemovedCallback option sur l'insertion... Alors vous pouvez vous connecter à la raison, à l'aide de la CacheItemRemovedReason argument. Vous pouvez donc connecter la raison comme l'un des quatre répertoriés des raisons:
Généralement, vous trouverez Expiré et sous-utilisés étant les raisons de choses qui n'ont pas explicit Supprimer les appels effectués sur le cache et ne pas avoir de dépendances.
Vous trouverez probablement, tandis que le suivi par le biais de cette substance d'amusement, que vos articles ne sont pas expiré ou sous-utilisés. Plutôt, je suppose que vous trouverez que le domaine d'application est prise en déchargé.
Une manière cela peut se produire en raison de la web.config (ou bin, ou .aspx, etc.) les fichiers se changer. Pour de plus amples informations quand cela se produit, consultez la Redémarrage de l'Application section de cette page. Lorsque cela se produit, les demandes en attente sont épuisées, le cache vidé, et le domaine d'application déchargé. Vous pouvez détecter cette situation en vérifiant la Domaine d'application.IsFinalizingForUnload et de journalisation que pendant le rappel.
Une autre raison pour le domaine d'application de recycler, c'est quand IIS décide de recycler le pool d'applications pour l'une des raisons pour lesquelles il a été configuré. Des exemples de ce sont xxx la mémoire a été allouée au cours de la vie, yyy secondes d'exécution pour le pool d'applications, ttt planifiée temps de recyclage, ou iiii temps d'inactivité (pas de demandes entrantes). Pour de plus amples détails, consultez le cet article pour IIS6 ou cet article pour IIS7
L'objet dans le Cache n'est pas une garantie qu'il aura sur les objets mis en cache à tous, beaucoup moins pour le temps que vous suggérez.
Si vous voulez plus encourageons fortement à le faire, vous pouvez définir CacheItemPriority.Haute ou CacheItemPriority.NotRemovable lorsque vous insérez un élément dans le Cache. Avec la valeur par défaut de priorité Normale, le moteur d'exécution est assez agressif de la politique de lâcher des objets lors de la sollicitation de la mémoire augmente.
Sur le dessus de que, par défaut, le pool d'applications IIS recycle une fois/jour, ce qui vous permettra tout clair dans le Cache.
Les docs http://msdn.microsoft.com/en-us/library/4y13wyk9.aspx dire que Cache.NoSlidingExpiration doit être utilisée si vous utilisez une expiration absolue.
cela peut ne pas être votre problème, j'ai juste trouvé que le Cache.NoSlidingExpiration devrait être le même laps de Temps.Zéro.
Prochaine, je voudrais vérifier que votre application de la piscine n'est pas à échéance et de vérifier la quantité de mémoire cache vous utilisez. Si c'est un trafic élevé de site à l'aide de beaucoup de mémoire (c'est à dire de la mémoire cache), puis il va expirer cache des éléments comme la mémoire est nécessaire pour d'autres choses.
également vérifier le dernier commentaire ici http://bytes.com/topic/net/answers/717129-c-asp-net-page-cache-getting-removed-too-soon quelqu'un semble avoir trouvé une solution à votre problème.
Vérifier le temps de recyclage sur votre Pool d'Application.
Par défaut, les éléments ajoutés au cache ont pas de date d'expiration du jeu, donc ce n'est certainement quelque chose à l'extérieur de la cache. Je suis d'accord avec Josh, vous devriez vérifier le temps de recyclage sur votre Pool d'Application.
Consulter cette page pour en voir un exemple de comment vous pouvez ajouter un délégué pour vous permettre de savoir exactement quand votre article est supprimé du cache. Cela peut vous aider dans la résolution de problèmes si ce n'est pas votre Pool d'Application:
http://msdn.microsoft.com/en-us/library/system.web.caching.cache.add.aspx
~md5sum~