Передача объектов сеанса и ответа классу - накладные расходы? - PullRequest
2 голосов
/ 21 ноября 2011

Мне было интересно, может ли кто-нибудь помочь мне понять, много ли я занимаюсь этим или нет.В настоящее время он работает, но я не уверен, может ли это замедлить работу сайта или нет.У меня есть класс workflowobj, в котором я устанавливаю все переменные сеанса.Этот класс создается на нужных страницах:

WorkFlowObj wfo = new WorkFlowObj (this.Session, this.Response);wfo.VendorRedirect ();

Мне это нужно, потому что мне нужно иметь возможность отслеживать переменные сессии и в то же время иметь возможность отслеживать более сложный рабочий процесс страницы в одном месте.Это решение уже работает для меня, но единственная проблема заключается в том, что я не уверен, что передача сеанса и объектов ответа создает много OVERHEAD.Может кто-нибудь сказать мне, если это ужасно неэффективно?Ниже приведен код для класса workflowobj.

    public class WorkFlowObj
    {
        private System.Web.SessionState.HttpSessionState _pagesession;
        private HttpResponse _HttpResponse;

        private int _userid;
        private string _vendorname;
         ///private other vars here
     }
    public int UserID
    {
        get
        {
            return _userid;
        }
    }


    public WorkFlowObj(System.Web.SessionState.HttpSessionState pagesession, HttpResponse _response)
    {
        _pagesession = pagesession;
        _HttpResponse = _response;
         Initialize();

    }

    private void Initialize()
    { 
    //initialize variables from session
    _userid=_pagesession["userid"].ToString();
    }


    public void VendorRedirect()
    {
        switch (this._vendorname)
        {

            case "1":
                this._HttpResponse.Redirect(page1);
                break;
            case "2":
                this._HttpResponse.Redirect(page2);
                break;
                //etc
            default:
                //dostuff;
                break;
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 22 ноября 2011

Как говорит Рик, я бы не стал создавать зависимости для System.Web в ваших объектах среднего уровня, если бы вы могли избежать этого.

Но если вы не можете избежать этого, вы можете избежать передачи объекта Session с помощью статического класса System.Web.HttpContext.Это позволяет вам сделать что-то вроде:

userid = (String)System.Web.HttpContext.Current.Session["userid"];

Пока он выполняется в том же потоке (и, следовательно, в том же контексте), что и запрос из браузера.

1 голос
/ 22 ноября 2011

Я бы не стал создавать зависимости для System.Web в ваших объектах рабочего процесса, просто передавал переменные, которые необходимы объектам рабочего процесса для принятия решения и выполнения бизнес-логики.Там нет проходящих над головой объектов, они просто указатели под капотом.

Одной из проблем, с которой я столкнулся, является случайное использование статики в другом слое, привязанном к вашему состоянию Page, что не позволяет ГХ очистить, т. Е. Исключение классической нехватки памяти или перезапуск пула приложений.

...