Es gibt ein Problem mit der Iteration: Es ist nicht threadsicher. Wenn Sie iterieren und auf den Cache von einem anderen Thread aus zugreifen, erhalten Sie möglicherweise einen Fehler. Die Wahrscheinlichkeit dafür ist gering, aber es ist ein Problem mit Anwendungen mit hoher Last. FYI, einige Cache-Implementierungen bieten nicht einmal Iterationsmethoden.
Wenn Sie Ihre Cache-Elemente löschen, möchten Sie nicht alles aus allen Bereichen der App-Domäne löschen, sondern nur, was mit Ihnen zusammenhängt.
Als ich mit diesem Problem konfrontiert wurde, löste ich es, indem ich eine benutzerdefinierte CacheDependency zu allen meinen Cache-Einträgen hinzufügte.
Dies ist, wie die CacheDependency definiert:
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<CustomCacheDependency> dep_list = new List<CustomCacheDependency>();
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 entries in a thread safe fashion:
private void FlushCache()
{
lock (dep_list)
{
foreach (CustomCacheDependency dep in dep_list) dep.ForceDependencyChange();
dep_list.Clear();
}
}
#endregion
Ich würde Versuchen Sie, die Site in IIS neu zu starten oder den Anwendungspool möglicherweise zu recyceln. Andernfalls könnten Sie eine Seite verfügbar machen, die alles manuell aus dem Cache löscht. – millimoose
@xarzu Unter welchen Umständen möchten Sie den Cache löschen? –