如果每个调用都需要计算很多事情并将其返回给客户端,那么缓存Queryable结果的最佳方法是什么。
码样例
[Queryable]
public IQueryable<Car> Get()
{
try
{
var result=GetCarList();
//GetCarList() calculation is taking around 1 min
return result.AsQueryable();
}
}
GetCarList()
{
var query = from car in db.CarDetail
where car.color == "white"
select car;
//10k records of white cars are selected with out considering makers
//white is mandatory
foreach (var car in query)
{
//Processing each record in every call
}
}查询示例
第一页
localhost/api/Car?$filter=(make eq 'ford')&$orderby=carid desc&$top=10第二页
localhost/api/Car?$filter=(make eq 'ford')&$orderby=carid desc&$top=10$skip=10第三页
localhost/api/Car?$filter=(make eq 'ford')&$orderby=carid desc&$top=10$skip=20每次调用都要花费1分钟,尽管当前滤波器的计算是相同的。缓存这种api调用的最佳方法是什么?
发布于 2015-05-20 12:04:30
正如OP在他的注释中解释的那样,要缓存的对象是调用GetCarList();返回的列表,结果总是相同的。
您只需将其存储在缓存中,请参阅docs:缓存类。
当您需要它时,检查它是否在缓存中。如果没有,请在使用之前创建它并存储在缓存中(您想使用它的任何地方)。由于Cache是线程安全的,通过从不同的请求访问它,您将不会有一致的问题。
https://stackoverflow.com/questions/30348462
复制相似问题