2011-08-12 5 views
1

こんにちは皆私は私のデータベースで他のクエリを作成せずに、同じリストをすべてのユーザーのために表示したいリストがあります。 フォーラムで検索私はOutPutCacheが私が従う最良の方法であることを発見しましたが、どうすればそれを行うことができるのか分かりません。Outputcacheを使用してすべてのユーザーに表示されるリスト<T>を保存するにはどうすればよいですか?

[EDIT]

がOutPutCacheそれを行うための最善の方法ですか?

答えて

1

あなたはここにあまりにも遠くになっています。あなたが持っているものがすべて1つのList<T>だとしばらくの間メモリに保存したいのであれば、出力キャッシングは必要ありません。出力キャッシングは、レンダリングされたページ全体をキャッシュして、コントローラーを呼び出さずにユーザーに送信する場合に使用します。

共有変数またはプレーンな古いキャッシュのいずれかを使用して、オブジェクトをメモリに保持するだけで済みます。

public class MyListFetcher<T> 
{ 
    public List<T> FetchData() 
    { 
      List<T> obj = HttpRuntime.Cache["myObjectCacheKey"] as List<T>; 

      if(obj != null) 
      return obj; 

      obj = FetchDataFromDatabase(); 

      HttpRuntime.Cache.Insert("myObjectCacheKey", obj, null, DateTime.Now.AddMinutes(5), Cache.NoSlidingExpiration, CacheItemPriority.Normal, null); 

      // Inserts the item and keeps it there for five minutes; then the cache will be invalidated. No sliding expiration 

     return obj; 
    } 

    protected List<T> FetchDataFromDatabase() 
    { 
     // Your DB fetch code 
    } 
} 
+0

助けてくれてありがとう、私はそれをやろうとします。 –

+0

それは働いている!どうもありがとう! –

0

コントローラメソッドの[OutputCache]属性はクエリの結果をキャッシュします.VaryByParamパラメータを使用すると、そのパラメータの結果がキャッシュされ、コントローラメソッドからデータベースへの呼び出し回数が減ります。