Comment vider le cache du serveur dans asp.net?

Comment vider le cache du serveur dans asp.net? J’ai découvert qu’il existe deux types de cache. Il y a le cache du navigateur et le cache du serveur. J’ai effectué des recherches mais je n’ai pas encore trouvé de guide clair et détaillé pour vider le cache du serveur à l’aide de asp.net (ou non).

(mise à jour) Je viens d’apprendre que le code-behind correspondant est en VB – Visual Basic (dot net).

Vous pouvez parcourir tous les éléments du cache et les supprimer un par un:

foreach (System.Collections.DictionaryEntry entry in HttpContext.Current.Cache){ HttpContext.Current.Cache.Remove(ssortingng(entry.Key)); } 

Correction de la syntaxe pour ASP.NET 4.5 C #

 foreach (System.Collections.DictionaryEntry entry in HttpContext.Current.Cache){ HttpContext.Current.Cache.Remove((ssortingng)entry.Key); } 

Il y a un problème avec l’itération: ce n’est pas thread-safe. Si vous effectuez une itération et que le cache est accessible à partir d’un autre thread, vous risquez de recevoir une erreur. La probabilité que cela soit faible est un problème pour les applications à charge élevée. Pour votre information, certaines implémentations de cache ne fournissent même pas de méthodes d’itération.

En outre, si vous effacez vos éléments de cache, vous ne voulez pas tout effacer de chaque partie du domaine de l’application, mais uniquement de ce qui vous concerne.

Lorsque j’ai rencontré ce problème, je l’ai résolu en ajoutant une CacheDependency personnalisée à toutes mes entrées de cache.

Voici comment la CacheDependency est définie:

 public class CustomCacheDependency : CacheDependency { //this method is called to expire a cache entry: public void ForceDependencyChange() { this.NotifyDependencyChanged(this, EventArgs.Empty); } } //this is how I add objects to cache: HttpContext.Current.Cache.Add(key, //unique key obj, CreateNewDependency(), //the factory method to allocate a dependency System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 0, ExpirationInSeconds), System.Web.Caching.CacheItemPriority.Default, ReportRemovedCallback); //A list that holds all the CustomCacheDependency objects: #region dependency mgmt private List dep_list = new List(); private CustomCacheDependency CreateNewDependency() { CustomCacheDependency dep = new CustomCacheDependency(); lock (dep_list) { dep_list.Add(dep); } return dep; } //this method is called to flush ONLY my cache ensortinges in a thread safe fashion: private void FlushCache() { lock (dep_list) { foreach (CustomCacheDependency dep in dep_list) dep.ForceDependencyChange(); dep_list.Clear(); } } #endregion 

Je ne suis pas sûr de la méthodologie exacte dans laquelle vous voudriez accomplir ceci. Mais il y a plusieurs moyens, l’un d’entre eux est celui que Giorgio Minardi a posté et qui découle de cette question .

Les autres choix pourraient être comme ceci:

 using Microsoft.Web.Administration; public bool RecycleApplicationPool(ssortingng appPoolName) { try { using (ServerManager iisManager = new ServerManager()) { iisManager.ApplicationPools[appPoolName].Recycle(); return true; } } catch (Exception ex) { throw new Exception("Unhandled Exception"); } } 

Cela permettra de recycler votre pool d’applications. Ce qui effacerait le cache. Vous avez quelques choix. Attention, bien que cela videra le cache, cela mettra également fin à toutes les sessions existantes.

Espérons que cela aide.

Vous devrez supprimer les éléments que vous avez ajoutés à la mémoire cache:

 var itemsInCache= HttpContext.Current.Cache.GetEnumerator(); while (itemsInCache.MoveNext()) { HttpContext.Current.Cache.Remove(enumerator.Key); } 

System.Web.HttpRuntime.UnloadAppDomain () – redémarre l’application Web, efface le cache, réinitialise les ensembles css / js

 public void ClearCacheItems() { List keys = new List(); IDictionaryEnumerator enumerator = Cache.GetEnumerator(); while (enumerator.MoveNext()) keys.Add(enumerator.Key.ToSsortingng()); for (int i = 0; i < keys.Count; i++) Cache.Remove(keys[i]); }