Слайд 2Постановка задачи
Использование объекта ViewState
Использование объекта SessionState
Проблема создания экземпляра HttpApplication
Слайд 3Постановка задачи
Обновляемые элементы управления передаются в виде HTML обрамленного JSON
Для обработки запросов
используется класс Web.UI.Page или его наследники
Отображение элементов управления распределено по времени (в несколько этапов)
Слайд 4Использование объекта ViewState
Слайд 5Использование объекта ViewState
Слайд 6Использование объекта SessionState
Слайд 7Использование объекта SessionState
Отказаться от использования
Реализация собственного SessionState
Прерывание текущих запросов
Слайд 8Использование объекта SessionState
Слайд 9Использование объекта SessionState
Отмена обработки события
Асинхронное событие
public delegate void AsyncEventDelegate(EventArgs e);
public void
OnAsyncEvent(){
Thread thread = new Thread(new ThreadStart(OnEvent));
thread.CurrentCulture = Thread.CurrentThread.CurrentCulture;
thread.Start();
while(!IsCompleted){
if(!HttpContext.Current.Response.IsClientConnected){
thread.Abort();
HttpContext.Current.Response.End();
return;
}
Thread.Sleep(10);
}
}
private void OnEvent(){
HttpContext.Current = context;
asyncEvent(args);
IsCompleted = true;
}
Создание события
protected override void OnInit(EventArgs e)
{
new AsyncEventWrapper(new AsyncEventDelegate(base.OnInit), e, Context).OnAsyncEvent();
}
Слайд 10Создание экземпляра HttpApplication
HttpApplicationFactory.RecycleNormalApplicationInstance(HttpApplication app)
private void RecycleNormalApplicationInstance(HttpApplication app)
{
if (this._numFreeAppInstances
< 100)
{
lock (this._freeList)
{
this._freeList.Push(app);
this._numFreeAppInstances++;
return;
}
}
app.DisposeInternal();
}
Слайд 11Создание экземпляра HttpApplication
Неблагоприятные условия
Слайд 12Создание экземпляра HttpApplication
Критичные условия