我试图创建一个asp.net mvc Web应用程序,有些页面需要在"实时"中显示数据。 ,这个数据是在sql server数据库上,数据总是在变化 我在sql server中创建了一个存储过程,我使用Entity framework linq在我的控制器中调用此过程,并使用ajax将结果发送到浏览器 我使用outputcashing来最小化存储过程的执行次数, 在同一个控制器中有多个使用相同存储过程的方法,每个方法执行相同的程序, 如何改善我的应用程序的性能, 有没有办法只对所有控制器执行一次存储过程?
这是我的控制器,我的目标是尽量减少数据库的使用
[OutputCache(Duration = 20, VaryByParam = "*")]
public class JobsETLController : Controller
{
private ETL_REP_MAUIEntities db = new ETL_REP_MAUIEntities();
public ObjectResult<BIOGetETLJobs_Result> ETLJobs;
public JobsETLController()
{
ETLJobs =db.BIOGetETLJobs();
}
public ActionResult Indexp()
{
var y = from xx in ETLJobs
where xx.etat!="Completed"
orderby xx.etat ascending
select xx;
return PartialView(y);
}
public ActionResult IndexpAll()
{
var y = from xx in ETLJobs
where xx.etat == "Completed"
select xx;
return PartialView(y);
}
答案 0 :(得分:1)
如果您的服务器不在Web场(多个服务器)中,那么您可以将数据缓存在Asp.net缓存中(这不是输出缓存,它是数据缓存)。您只需在数据到期时设置5分钟的时间限制(您说数据需要每5分钟更新一次),这样当控制器需要数据时,它首先检查缓存,如果它不存在则然后将执行存储过程。
MyData items;
items = (MyData)Cache["MyData"];
if(items == null)
{
items = DoQueryToReturnItems();
Cache.Add("MyData", items, null, DateTime.Now.AddMinutes(5), ..);
}
甚至可以将缓存项设置为依赖于SqlDependency,这样当数据发生更改时,缓存就可以更新。