Отдельные кэши с ASP.NET? - PullRequest
0 голосов
/ 08 октября 2009

Поддерживает ли ASP.NET понятие нескольких кэшей со встроенным кэшированием? Моя конечная цель - вытащить все элементы определенного типа из кеша. Это можно сделать с помощью отдельного кэша для каждого типа или с помощью какого-либо соглашения об именах. В идеале я мог бы использовать LINQ следующим образом:

var items = (из элемента в кеше. Элементы, где item.Key.StartsWith ("person") выбрать элемент);

Или, возможно, я мог бы определить отдельный «личный» кеш. Возможно ли это со встроенной системой или мне нужно будет использовать стороннюю альтернативу?

Спасибо

Ответы [ 2 ]

3 голосов
/ 08 октября 2009

Фактически, Cache класс уже реализует IEnumerable, так что вы можете foreach над ним (и запросить его с LINQ, в этом отношении). В документации не указывается, какой тип объекта дает этот перечислитель, но это можно найти в отладчике раз и навсегда.

1 голос
/ 08 октября 2009
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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...