我将一堆带有特定前缀的项目添加到ASP.NET缓存中。
我希望能够遍历缓存并删除那些项目。

我尝试这样做的方式是这样的:

    foreach (DictionaryEntry CachedItem in Cache)
    {
        string CacheKey = CachedItem.Key.ToString();
        if(CacheKey.StartsWith(CACHE_PREFIX){
            Cache.Remove(CacheKey);
        }
    }

我可以更有效地做到这一点吗?

我曾考虑过创建一个临时文件,并添加对文件的依赖项,然后才删除该文件。那是致命的吗?

最佳答案

在迭代集合时,您无法从集合中删除项目,因此您需要执行以下操作:

List<string> itemsToRemove = new List<string>();

IDictionaryEnumerator enumerator = Cache.GetEnumerator();
while (enumerator.MoveNext())
{
    if (enumerator.Key.ToString().ToLower().StartsWith(prefix))
    {
        itemsToRemove.Add(enumerator.Key.ToString());
    }
}

foreach (string itemToRemove in itemsToRemove)
{
    Cache.Remove(itemToRemove);
}

这种方法很好,并且比缓存依赖项更快,更容易。

关于asp.net - 从缓存(ASP.NET)删除特定项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/704765/

10-11 20:35