Я неправильно использую Session_End?
В моем приложении есть кеш для ускорения загрузки страниц, он работает довольно хорошо. Недавно кто-то сказал мне, что я терял память, никогда не очищая ее, и реализовал метод в Session_End, который будет очищать любые записи кэша, связанные с этим идентификатором сеанса.
Время от времени, хотя я начал видеть аномальное поведение. При загрузке страницы очень редко я вижу пустую страницу, показывающую исключение из-за того, что кеш для этой страницы пуст. Я установил точку останова отладчика в доступе к кешу и в методах session_end, надеясь перехватить ее в следующий раз, когда это произошло.
В следующий раз, когда это случилось, я был очень удивлен тем, что на самом деле происходило. Мой браузер долгое время оставался открытым, но бездействующим, поэтому я предполагаю, что у него был устаревший файл cookie сеанса. Он попадает на сервер для страницы, который помещает копию страницы в кеш. Пока страница все еще загружается, Session_End вызывается мгновенно, что удаляет ее из кэша. Если я перезагружаю браузер, Session_End продолжает вызываться, агрессивно пытаясь закрыть мой сеанс, который продолжает запрашивать плохой браузер.
Итак, я полагаю, мои настоящие вопросы:
- Почему браузер не получает новый сеансовый файл cookie, если старый файл анафемен для IIS?
- Session_End просто не предназначен для такого использования?
- Есть ли лучший способ сделать то, что я пытаюсь сделать?
@ Sosh - мой global.asax.cs:
protected void Session_End(Object sender, EventArgs e)
{
//clean up object cache on session expiry
string sessionID = this.Session.SessionID;
foreach (string key in Global.DataGroups.Keys)
{
if (key.EndsWith(sessionID))
{
Global.DataGroups.Remove(key);
}
}
}