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