我有一个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;
}