2 回答
TA贡献1827条经验 获得超9个赞
您没有发出 1 个请求——您发出了 1 个加载页面的请求,然后是 5 个获取数据的请求。除非您考虑使用缓存,否则您无法在调用之间保留这样的数据。
https://msdn.microsoft.com/en-us/library/system.web.caching.cache(v=vs.110).aspx
我的想法是您的控制器方法应该首先检查缓存以查看该项目是否存在,如果存在,则将其拉出并返回。如果该项目不存在,则.GetData()
在返回数据之前调用 \并立即将其存储在缓存中。您还可以设置一些选项,让数据在几分钟后过期。
TA贡献1785条经验 获得超8个赞
为了使 Jason 的回答更具体,一个选项是使用MemoryCache类在指定时间段内跨 AJAX 调用缓存数据,如下所示:
using System.Runtime.Caching;
[HttpGet]
public ContentResult GetData1()
{
var query = GetData();
//Rest of code
}
public object GetData()
{
string key = "myDataKey";
object data = MemoryCache.Default.Get(key) as object; // specify your type instead of object
if (data == null) // not in cache, need to go to DB
{
data = _myService.GetData();
// Cache it for 5 minutes.
DateTimeOffset duration = DateTimeOffset.UtcNow.AddMinutes(5);
MemoryCache.Default.AddOrGetExisting(key, data, duration);
}
return data;
}
如果线程同步是个问题,您可能需要在代码周围加锁GetData()。
- 2 回答
- 0 关注
- 188 浏览
添加回答
举报