У меня есть страница ASPX, которая выполняет множество запросов к базе данных, которые я пытаюсь кэшировать, чтобы улучшить производительность приложения.Страница может иметь одно из трех состояний:
- Ожидание динамических данных.
- Отображение динамических данных.
- Завершение отображения динамических данных.
DateTime для динамических данных сохраняется в объекте, который вы загружаете с помощью параметра GET «Id».Я хочу, чтобы поведение было следующим:
a> Пользователь просматривает «MyPage.aspx? Id = x», когда состояние страницы равно 1. При первой загрузке страница просматривает базу данных, получаетDateTime ожидает получения новых данных и кэширует страницу до этой даты.
b> Пользователь просматривает «MyPage.aspx? Id = x» после DateTime для этого объекта (иначе, состояние = 2),При первой загрузке, поскольку срок действия кэша истек, страница генерируется динамически и показывает последние данные базы данных.Страница кэшируется в течение 30 секунд для повышения производительности для последующих пользователей.
c> Пользователь переходит к «MyPage.aspx? Id = x» после изменения состояния на 3. Страница теперь никогда не изменитсятак что нет смысла искать в базе данных.Срок действия кэша истекает через месяц (или никогда не истекает, если это возможно).
Я пытался сделать это с помощью следующего кода (мои состояния называются «В ожидании», «InProgress» и «Complete "):
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["Id"] != null)
{
int id = Convert.ToInt32(Request.QueryString["Id"]);
// load object into var 'm'
// set up controls using information from DB (all DB work is abstracted to the class of 'm'
if (m.Status == Status.Pending)
{
Response.Cache.SetExpires(m.Date);
Response.Cache.VaryByParams["Id"] = true;
Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetValidUntilExpires(true);
// do other stuff related to pending
}
else if (m.Status == Status.InProgress)
{
Response.Cache.SetExpires(DateTime.Now.AddSeconds(30));
Response.Cache.VaryByParams["Id"] = true;
Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetValidUntilExpires(true);
// do other stuff related to in progress
}
else
{
// completed
Response.Cache.SetExpires(DateTime.Now.AddMonths(1));
Response.Cache.VaryByParams["Id"] = true;
Response.Cache.SetCacheability(HttpCacheability.Server);
Response.Cache.SetValidUntilExpires(true);
// do other stuff related to completed
}
// load data into page (uses additional database calls)
}
else
Response.Redirect("~/Default.aspx");
Я не уверен, что это именно то, что я ожидаю.Я протестировал его с FireBug, и заголовок Cache-Control установлен на «no-cache», а дата истечения срока действия кэша установлена на «Wed Dec 31 1969 18:00:00 GMT-0600 (Central Standard Time)»,Когда я закомментирую строки Response.Cache, приведенные выше, заголовок элемента управления кэшем имеет значение «private», а дата окончания срока действия кэша устанавливается такой же, как указано выше.что тут не так или как проверить лучше?
Спасибо!