我有一个 ASP.Net 日历控件,它在 DayRender 上循环遍历“CalendarEvents”列表(我的课程之一)。如果 DayRender 所在的那一天在 CalendarEvents 列表中,则在该日历单元格中填充事件的详细信息。
在我的测试环境中,没有问题,但我想有成千上万的记录,它可能会成为一个问题。这是我正在做的事情:
public partial class calendar : System.Web.UI.Page
{
CalendarEventList allevents = CalendarEventManager.GetListAll();
//Page_Load, etc...
protected void calmaincalendar_DayRender(object sender, DayRenderEventArgs e)
{
foreach (CalendarEvent x in allevents)
{
if (e.Day.Date == x.EventDate)
{
//logic to extract the data from x, and modify the e.Cell to display that data
}
}
}
}
我的问题是:
1)我将事件作为页面级变量,这样数据库只需要调用一次,而不是在每个 DayRender 上。好坏?潜在问题?此页面纯粹是为了阅读日历事件,而不是编辑或删除。
2)循环遍历每个 DayRender 上的“所有事件”列表,这是否具有潜在的危险/资源密集型?Calendar 控件是否仅针对正在显示的月份调用 DayRender?如果是这样,意味着一次只有 30 或 31 个电话,那可能没问题。但是,如果它在全年或前几个月和下个月都调用 DayRender 之类的事情......无论如何,希望你明白我的意思。对此的建议将不胜感激。
3)有什么我可以做得更好的吗?我意识到我只发布了裸露的骨架,但如果有人有任何类似的经历,或者他们希望他们早点意识到的陷阱,我们将不胜感激。
当我输入问题时,我意识到当我在页面级别获得 CalendarEventList 时,我可以立即循环遍历它并删除除过去 3 个月和未来 3 个月或其他内容之外的所有内容。问题是,以某种方式跟踪它,以便当用户返回 4 个月时,我必须意识到这一点并再次调用数据库。我有一种模糊的感觉,答案在那个方向的某个地方,但仍然不确定。