使用ASP.NET单独缓存?

时间:2009-10-08 14:41:19

标签: asp.net caching

ASP.NET是否支持使用内置缓存的多个缓存的概念?我的最终目标是能够从缓存中提取某种类型的所有项目。这可以通过每种类型的单独缓存或通过某种命名约定来完成。理想情况下,我可以通过以下方式使用LINQ:

var items =(from cache.Items item中的item.Key.StartsWith(“person”)select item);

或许我可以定义一个单独的“人”缓存。这可能与内置系统有关,还是需要使用第三方替代方案?

由于

2 个答案:

答案 0 :(得分:3)

事实上,Cache类已经implements IEnumerable,因此您可以foreach覆盖它(并使用LINQ查询)。文档没有说明这个枚举器产生的对象的类型是什么,但这可以在调试器中一次性地找到。

答案 1 :(得分:1)

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Cache.Insert("nord", new Person("Nord"));
        Cache.Insert("bert", new Person("Bert"));
        Cache.Insert("frog", new Animal("Kermit"));

        foreach (Person p in Cache.CacheOfType<Person>())
        {
            Response.Write(p.Name); //prints NordBert
        }
        Response.Write("<br>");
        foreach (Animal a in Cache.CacheOfType<Animal>())
        {
            Response.Write(a.Name); //prints Kermit
        }
    }
}

public static class CacheExt
{
    public static IEnumerable<T> CacheOfType<T>(this System.Web.Caching.Cache cache) where T : class
    {
        foreach (System.Collections.DictionaryEntry i in cache)
        {
            if (i.Value as T != null) yield return (T)i.Value;
        }
    }
}