2017-09-25 5 views
0

J'utilise les données de réserve de mémoire cache en mémoire 120 Go Je connais son trop grand mais son la meilleure pratique pour mon projet la question est que je utilise l'objet de la mémoire cache commecache mémoire C# .net

suivant

J'ai créé objet statique pour la mémoire cache

var collection = new System.Collections.Specialized.NameValueCollection(); 
      collection.Add("CacheMemoryLimitMegaBytes", "155000"); 
      //var memoryCashe = new MemoryCache("Images", collection); 
      MemoryCachingProvider.cache = new MemoryCache("Images", collection); 
//Here how I add new item 

CacheItemPolicy policy = new CacheItemPolicy(); 
        policy.Priority = CacheItemPriority.NotRemovable; 
        cache.Add(key, value, policy); 

mais la mémoire vide après devenais période de temps si je ne l'utilise.

Je construis application API Web

et j'ai assez d'espace dans la RAM 170 Go

suggestions

+1

C'est "cacheMemoryLimitMegaBytes", minuscule c. –

+0

pourrait causer ce problème aucune erreur soulevée quand je l'ai utilisé comme ça –

+1

Pas besoin de demander quand vous pouvez simplement l'essayer. Tapez "asdf". –

Répondre

0

Habituellement si elle est « après la période de temps », il signifie que vous avez probablement une valeur SlidingExpiration autre que "NoSlidingExpiration". À part cela, il se peut que votre pool d'applications soit en cours de recyclage à des intervalles spécifiques, ce qui vous donne l'impression que le cache est "vidé".

+0

Aucune expiration coulissante et j'ai vérifié le pool de l'application non configuré pour recycler quelle sera la raison –

1

Les caches sont temporaires par nature. Si IIS fait basculer le pool d'applications, toutes ces ressources seront recyclées. Vous devrez vous assurer que le pool d'applications ne recycle jamais (presque impossible) ou que vous devez déplacer ce cache vers une ressource externe et durable telle que redis.

+0

I There Une façon de réserver la mémoire aussi j'ai vérifié les paramètres de l'application de son pas configuré pour recycler, j'ai utilisé redis mais pas répondu à mes exigences j'ai besoin de toutes les données un coup de sorte que le trafic limitera la vitesse –

+0

Divers autres délais d'attente peuvent également faire dévaler la piscine de l'application. En outre, en cas de blocage, IIS peut le supprimer indépendamment de la configuration, de sorte qu'il peut continuer à diffuser des requêtes sur le site auquel il est affecté. Votre problème est la durée pendant laquelle vous voulez que les données ne vivent pas tellement. Quand vous dites que vous avez besoin de toutes les données, qu'est-ce que vous voulez dire? – Bigsby

+0

J'ai besoin des données pendant quelques heures aussi longtemps que possible, quand j'ai dit un coup je veux dire j'ai besoin de toutes les données ensemble ne recevant pas chaque élément seul je traiterai l'ensemble des données, Et j'ai besoin du disponible dans le niveau d'application partagé entre toutes les sessions –

1

Comme mentionné par d'autres, cela se produit probablement à cause du serveur IIS Recycling. "Éteindre" le recyclage peut être une solution de redressement à votre problème et fonctionnera comme une solution d'urgence. Mais si j'étais dans votre pantalon, après avoir appliqué ce revirement, j'essaierais différentes façons d'utiliser le cache mémoire sans désactiver le processus de recyclage.

Recyclage

Le recyclage est généralement * où IIS démarre un nouveau processus en tant que conteneur pour votre application, et donne alors l'ancien jusqu'à ShutdownTimeLimit de partir de son propre gré avant qu'il ne soit tué.

* - en général: voir DisallowOverlappingRotation/« Désactiver recyclage Superposition » réglage

Il est destructeur, en ce que le processus original et toutes ses informations d'état sont mis au rebut (y compris le cache de mémoire précieux).

Que faire:

En général:

  • Désactiver les délais d'attente d'inactivité. 20 minutes d'inactivité = boom! Nouveau processus sur la prochaine requête entrante Réglez cela à zéro.
  • Désactiver Intervalle de temps régulier - le défaut "29 heures" a été décrit comme "fou", "ennuyeux" et "intelligent" par diverses parties. En fait, seulement deux d'entre eux sont vrais. Activer éventuellement DisallowRotationOnConfigChange (ci-dessus, Désactiver le recyclage pour les changements de configuration) si vous ne pouvez pas arrêter de jouer avec - cela vous permet de changer n'importe quel paramètre de pool d'applications sans signaler immédiatement aux processus de travail qu'il doit être tué . Vous devez recycler manuellement le pool d'applications pour que les paramètres prennent effet, ce qui vous permet de prédéfinir les paramètres, puis d'utiliser une fenêtre de modification pour les appliquer via votre processus de recyclage.

Cela suffit à faire vivre un processus qui se comporte bien pour toujours. S'il meurt, bien sûr, il sera remplacé. Si elle se bloque, le ping devrait ramasser cela et un nouveau devrait démarrer dans les 2 minutes (par défaut, le calcul le plus défavorable devrait être: jusqu'à la fréquence ping + ping timeout + délai de démarrage avant que les requêtes recommencent).

Sugestion:

Utiliser l'état de session hors processus (par exemple, l'état du serveur ou une base de données, ou même un cookie si est minuscule votre état) peut vous permettre de travailler autour de cela sans désactiver le recycler.


J'espère que ça aide!