C# 正在清除Sitecore的.NET缓存

C# 正在清除Sitecore的.NET缓存,c#,.net,sitecore,C#,.net,Sitecore,我需要清除Sitecore中用于自定义模块的缓存,清除它的最佳做法是什么 我们目前正在使用向缓存添加密钥 System.Web.HttpContext.Current.Cache.Add(key, obj, dependencyKey, DatTime.MaxValue); 但发布时不会清除此缓存,我需要手动清除它。我知道可以连接到Sitecores发布事件,但需要一种方法来清除它 已尝试使用以下命令删除密钥: System.Web.HttpContext.Current.Cache.Remo

我需要清除Sitecore中用于自定义模块的缓存,清除它的最佳做法是什么

我们目前正在使用向缓存添加密钥

System.Web.HttpContext.Current.Cache.Add(key, obj, dependencyKey, DatTime.MaxValue);
但发布时不会清除此缓存,我需要手动清除它。我知道可以连接到Sitecores发布事件,但需要一种方法来清除它

已尝试使用以下命令删除密钥:

System.Web.HttpContext.Current.Cache.Remove(key);
但是它没有做到这一点

没有
.Clear()
方法

您可以使用
Cache
类的
GetEnumerator
方法迭代所有条目并按其键(或ID)删除它们

IDictionaryEnumerator enumerator = Cache.GetEnumerator();
while(enumerator.MoveNext()) 
{
    Cache.Remove(enumerator.Key); 
}

我会在publish:end:remote事件中运行此代码。

您的问题是如何在发布结束时触发代码,还是为什么。Remove()没有清除缓存?问题是为什么。Remove()没有在前端“在前端”删除它-您是否将代码添加到发布:结束或发布:结束:远程事件?它已添加到这两个事件中。我是否需要以某种方式创建for循环并删除缓存中的每个键,或者是否缺少某种缓存.clear()im?此代码是否会导致
InvalidOperationException
,因为您在枚举集合时正在修改它?有了
.GetEnumerator
,使用
foreach
(从而能够通过
.ToArray()
)复制数据不是更好吗?是的,从某个地方读到它会(或可能)导致很多问题。设置一个slidingexpiration,然后在发布时添加一个新键,怎么样?这也会清除缓存吗?这(最终)会清除缓存,但这似乎使代码过于复杂,需要大量的密钥管理。至于枚举问题:Aravol建议可能会发生什么。我不确定。枚举数是在修改缓存对象之前创建的单独实例化对象。因为我们总是在缓存中前进,所以我认为它是安全的。如果没有,迭代代码可以变得更加健壮。无论如何,我仍然会以这种方式清除缓存,并在publish:end:remote事件时执行此操作。