我有一个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个月时,我必须意识到这一点并再次调用数据库。我有一种模糊的感觉,答案在某个方向,但仍然不确定。
答案 0 :(得分:1)
当你谈论记录时,我猜你有一个底层数据库。如果是这样,我会建议为此创建一个查询,以便您可以这样做:
foreach (CalendarEvent x in CalendarEventManager.GetForDate(e.Day.Date))
{
//logic to extract the data from x, and modify the e.Cell to display that data
}
这样,您只需检索所需的记录。