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

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

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

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

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

谢谢 .

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