2

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

WorkFlowObj wfo = new WorkFlowObj(this.Session, 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;
        }
    }
}
4

2 回答 2

2

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

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

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

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

于 2011-11-21T21:57:34.207 回答
1

我不会System.Web在您的工作流对象中创建依赖关系,只需传递工作流对象做出决策和执行业务逻辑所需的变量。没有开销传递对象,它们只是引擎盖下的指针。

我可以看到发生的一个问题是在与您的状态相关的另一层中意外使用静态Page,因此不允许 GC 清理即:经典的内存不足异常或应用程序池回收。

于 2011-11-21T20:02:00.497 回答