2011-11-15 5 views
0

私のコードは、すでにコントローラにこのようなものを持っている:私はこれを言っで修正データベースからのデータをキャッシュするオプション?

[OutputCache(Duration = 86400] 
    public string SelectTopics(bool showAll = true, string topicID = null) 
    { 
     return SelectHelper.Topics(showAll, topicID); 
    } 

Amがキャッシュされるのですか?

外部のコントローラでないクラスとメソッドについてはどうですか?これらを使用してデータベースのキャッシュを行う方法はありますか、またはすべてのデータベースのキャッシュをコントローラ経由で行う必要がありますか?データにアクセスする他の方法/手段はどうでしょうか?他にキャッシングを許可するものはありますか?

+0

データベースからのhtml出力やアイテムのリストをキャッシュしますか? –

答えて

2

これはキャッシュされると言っていいですか?

これはHTML出力全体をキャッシュします。つまり、出力がキャッシュされている場合、コントローラのアクションは実行されません。この場合、SelectHelper.Topicsは実行されません。

データをキャッシングするその他の方法には、System.Runtime.Caching名前空間のクラスを使用することが含まれます。それらを使用すると、NETオ​​ブジェクトをキャッシュに格納できます。たとえば、データベース呼び出しから取得した結果をキャッシュに格納し、次にそのデータベースにヒットする前にキャッシュに結果が含まれているかどうかを確認できます。あなたは例のためにMemoryCacheクラスを見てみることができます。

+0

ありがとうダーリン、あなたはコントローラのアクションが実行されないことを言及します。しかし、私は、キャッシュが期限切れになるまでアクションが呼び出されるたびに同じ文字列を返すと言うのは間違いありませんか?そうであれば、トピックは頻繁に変更されないので問題ありません。 –

+2

@ Melissa、キャッシュ期間が終了するまで、各リクエストはまったく同じHTML出力を得ると言っても間違いありません。ただし、このHTMLにユーザー固有の部分が含まれている場合(たとえば、Johnが現在ログインしているユーザーの名前である「Welcome John」と言うセクションがあるとします)ページがキャッシュされ、以降のすべてのリクエストがキャッシュからこのページを取得するため、Marryがサイトにログインしてページをリクエストすると、キャッシュされたページが表示されるため、「Welcome John」が表示されます。 –

+0

+1ダーリン、あなたは常に適切な詳細レベルで具体化しています:-) –

関連する問題