Простое кэширование данных с использованием слабых ссылок в WCF - PullRequest
1 голос
/ 02 апреля 2010

Учитывая, что у меня есть следующий сервис 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).

Ответы [ 2 ]

1 голос
/ 02 апреля 2010

Для этого сценария вы захотите использовать своего рода хеш-таблицу в стиле WeakReference. Ни один не доступен в 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 голосов
/ 02 апреля 2010

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

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

см. Также Кэширование в WCF?

...