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!
}

另一种选择是只缓存您需要的数据:

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

请注意,在最后一个示例中,最大缓存可能会过期,除非您有一个非常活跃的应用程序,或者如果您将应用程序池进程配置为没有空闲关闭。

于 2012-11-20T15:23:10.723 回答