2010-04-02 1 views
1

Учитывая, что у меня есть следующие службы WCF:Простого кэширования данных с использованием слабых ссылок в WCF

class LookUpService 
{ 
    public List<County> GetCounties(string state) 
    { 
     var db = new LookUpRepository(); 
     return db.GetCounties(state); 
    } 
} 

class County 
{ 
    public string StateCode{get;set;} 
    public string CountyName{get;set;} 
    public int CountyCode{get;set;} 
} 

Что будет наиболее эффективным (или лучшим) способом кэшировать графства этого состояния, используя слабые ссылки (или любой другие подход), чтобы мы не попадали в базу данных каждый раз, когда нам нужно было искать данные.

Примечание, что у нас не будет доступа к HttpRuntime (и HttpContext).

ответ

1

Для этого сценария вы захотите использовать хеш-таблицу стиля. В BCL нет (до 4.0), но доступно несколько доступных онлайн. Я буду использовать следующее для этого образца

Попробуйте следующее cdoe

class LookupService { 
    private WeakHashtable<string,List<Count>> _map = new WeakHashtable<string,List<County>>(); 
    public List<County> GetCounties(string state) { 
    List<Count> found; 
    if (!_map.TryGetValue(state, out found)) { 
     var db = new LookUpRepository(); 
     found = db.GetCounties(state); 
     _map.Add(state,found); 
    } 
    return found; 
    } 
} 

Как вы можете видеть, это не сильно отличается, чем при использовании нормального Dictionary<TKey,TValue>

0

Почему у вас нет доступа к HttpRuntime? Вам не нужен контекст. Вам нужен только класс.

В приложении nonASP.NET вы можете использовать use System.Web.Caching без использования HttpContext.

см. Также Caching in WCF?