缓存ASP.Net MVC页面数据

时间:2015-03-26 14:46:00

标签: c# asp.net-mvc caching

我有一个ASP.Net MVC 3 Web应用程序,在一个特定页面中,当页面加载时会发生相当多的数据处理。请参阅下面的示例代码。

基本上代码是查询我的数据库并将数据拉回变量 shiftDates ,这可能是多达一千条记录。接下来,我对该数据执行分组并对其进行区分,并将其放入名为 groupOrgs 的变量中。然后我遍历这些数据,并将每条记录及其相关数据放入我的Razor View所需的ViewModel中。

你可能会读到这个并认为这段代码加载,查询和显示给用户的时间不会太长,但是,还有另外两段代码,非常类似于下面的代码,也在我的Controller方法中。也可以在用户加载页面时运行。因此,请在一页加载中请求下面的代码运行三次。这会导致页面加载时间明显延迟。

我想我希望得到关于如何重构我的代码的任何帮助或建议,或者当页面加载时,最初它从数据库中提取它并执行所有查询等,但如果页面被重新加载,那么数据是从缓存源中提取的。

真的,非常感谢任何帮助。

感谢。

控制器

public ActionResult Index()
{
            ViewModelHomepage model = new ViewModelHomepage();
            IList<ViewModelHomepageCounters> orgShiftDates = new List<ViewModelHomepageCounters>();

            //Get all available dates
            IList<ShiftDate> shiftDates = _shiftDateService.GetAllShiftDatesToBeFilled();

            //Get total dates per Organisation
            var groupOrgs = shiftDates
                .GroupBy(x => x.Shift.Organisation.description)
                .Select(x => new
                {
                    _id = x.FirstOrDefault().Shift.organisationID,
                    _orgName = x.Key,
                    _shiftDateCount = x.Count()
                }
                ).OrderBy(x => x._orgName);

            foreach (var item in groupOrgs )
            {
                ViewModelHomepageCounters t = new ViewModelHomepageCounters();
                t.id = item._id;
                t.OrgName = item._orgName.ToString();
                t.totalShiftDates = Convert.ToInt32(item._shiftDateCount);
                orgShiftDates.Add(t);
            }
            model.OrgShiftDates = orgShiftDates;
}

0 个答案:

没有答案