将会话和响应对象传递给类开销

本文关键字:开销 对象 会话 响应 | 更新日期: 2023-09-27 18:15:16

我想知道是否有人可以帮助我了解我正在做的事情是否有很多开销。它目前正在工作,但我不确定这是否会减慢网站的速度。我有一个workflowobj类,我设置所有的会话变量。该类在需要它的页面上实例化:

WorkFlowObj wfo = new WorkFlowObj(this。会话,this.Response);

wfo.VendorRedirect ();

我需要这个,因为我需要能够保持会话变量的跟踪,并在同一时间能够保持跟踪一个更复杂的页面工作流在一个地方。这个解决方案已经为我工作了,但唯一的问题是,我不确定传递会话和响应对象是否会产生很多开销。谁能告诉我这是不是非常低效??下面是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;
        }
    }
}

将会话和响应对象传递给类开销

正如Rick所说,如果可以避免的话,我不会在中间层对象中创建对System.Web的依赖。

但是如果您无法避免它,您可以通过使用静态System.Web.HttpContext类来避免传递Session对象。这允许您执行如下操作:

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

只要它与来自浏览器的请求在同一线程上执行(因此在相同的上下文中)。

我不会在你的工作流对象中创建对System.Web的依赖,只是传递工作流对象需要做出决策和执行业务逻辑的变量。没有传递对象的开销,它们只是底层的指针。

我可以看到发生的一个问题是意外使用静态在另一层得到绑定到您的Page状态,从而不允许GC清理如:经典的内存不足异常或应用程序池回收。