0

DayRender で、「CalendarEvents」(私のクラスの 1 つ) のリストをループする ASP.Net Calendar コントロールがあります。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) イベントをページ レベルの変数として配置しているため、データベースは 1 回だけ呼び出され、DayRender ごとに呼び出される必要はありません。良し悪し?潜在的な問題?このページは、編集や削除ではなく、純粋にカレンダー イベントを読むためのものです。

2) すべての DayRender で「allevents」リストをループすることは、潜在的に危険であり、リソースを大量に消費しますか? Calendar コントロールは、表示されている月だけ DayRender を呼び出しますか? もしそうなら、一度に 30 か 31 の呼び出しだけを意味するので、問題ないかもしれません。しかし、それが DayRender を 1 年全体、または前月と翌月にも呼び出すようなことを行う場合... とにかく、うまくいけば私の主張を理解していただけます。これに関するアドバイスをいただければ幸いです。

3) 改善できる点はありますか? むき出しの骨組みしか投稿していないことは承知していますが、同様の経験をした人や、もっと早く気づいてほしかった落とし穴を持っている人がいれば、そのアドバイスをいただければ幸いです。


質問を入力していると、CalendarEventList をページ レベルで取得すると、すぐにそれをループ処理して、過去 3 か月と将来の 3 か月などを除くすべてを切り取ることができることに気付きました。ユーザーが4か月前に戻ったときに、これを認識してデータベースを再度呼び出す必要があるように、何らかの形でそれを追跡するという問題があります。答えはその方向のどこかにあるという漠然とした感じがありますが、まだ確信が持てません。

4

1 に答える 1

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
}

このようにして、必要なレコードだけを取得します。

于 2012-06-19T05:43:32.310 に答える