0

テストのグループから一連の測定値の平均を返すコントローラーアクションがあります。コントローラは基本的に、指定されたグループ内のすべてのテストからデータポイントを取得し、すべてのデータポイントの平均を返します。テストは定期的にテストグループに追加されます。

コントローラーを最適化して、結果をキャッシュし(データが変更されていない場合、すべてのリクエストでデータベースにクエリを実行する意味があるため)、リクエストを受信して​​新しいテストが行​​われた場合にのみキャッシュを再構築したいと思います。テストグループに追加されました。私のテーブル構造(簡略化)は以下のとおりです。

これを達成するための最良の方法は何ですか?

TEST_GROUP
------------
group_name
group_id

TEST
-------------
test_id
group_id
test_date

DATA
--------------
test_id
measurement_number
measurement
4

2 に答える 2

0

データベーストリップなしでは、新しいレコードがあるかどうかを確認することはできません。時間ベースの有効期限でコントローラーにキャッシュを提供する場合は、OutputCachingを調べてください。アクションにパラメーターを使用しているとは思いませんが、使用している場合は、キャッシュされる時間を増やし、パラメーターによって異なるため、新しいパラメーターが渡された場合に結果が個別にフェッチされるようにすることができます。

ここで出力キャッシュの記述を見てください:

http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/improving-performance-with-output-caching-cs

于 2012-11-19T23:10:08.473 に答える
0

特定の期間のキャッシュがニーズを満たす場合は、次のようにしてビューレベルでこれを実行できます。

[OutputCache(Duration = 300)] //Cache for 5 minutes.
public ActionResult Average() {
    //Do your stuff!
}

もう1つのオプションは、必要なデータをキャッシュすることです。

HttpRuntime.Cache.Insert(key, value, null, DateTime.MaxValue, System.Web.Caching.Cache.NoSlidingExpiration);

この最後の例では、非常にアクティブなアプリケーションがある場合、またはアプリケーションプールプロセスをアイドル状態でシャットダウンしないように構成した場合を除いて、最大キャッシュが期限切れになる可能性があることに注意してください。

于 2012-11-20T15:23:10.723 に答える