1

次の 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) にはアクセスできないことに注意してください。

4

2 に答える 2

1

このシナリオWeakReferenceでは、ある種のスタイル ハッシュ テーブルを使用する必要があります。BCL (4.0 まで) では利用できませんが、オンラインで利用できるものはいくつかあります。このサンプルでは以下を使用します

次の CDE を試してください

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>

于 2010-04-02T17:50:25.170 に答える
0

HttpRuntime にアクセスできないのはなぜですか? コンテキストは必要ありません。クラスだけが必要です。

HttpContext を使用せずに、ASP.NET 以外のアプリでSystem.Web.Caching を使用できます。

WCF でのキャッシュも参照してください。

于 2010-04-02T17:53:38.000 に答える