我想知道是否有人可以帮助我理解我所做的事情是否是很多开销。它目前正在工作,但我不确定这是否会减慢网站的速度。 我有一个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;
}
}
}
答案 0 :(得分:2)
正如Rick所说,如果可以避免,我不会在中间层对象中创建System.Web
的依赖关系。
但是如果你无法避免它,你可以避免使用静态System.Web.HttpContext
类传递Session对象。这可以让你做类似的事情:
userid = (String)System.Web.HttpContext.Current.Session["userid"];
只要它在与浏览器请求相同的线程上(因此在相同的上下文中)执行。
答案 1 :(得分:1)
我不会在工作流对象中创建System.Web
的依赖关系,只需传递工作流对象需要做出决策和执行业务逻辑的变量。周围没有顶部传递物体,它们只是引擎盖下的指针。
我可以看到发生的一个问题是在另一层中意外使用静态,这些静态绑定到Page
状态,因此不允许GC清理,即:经典的内存不足异常或应用程序池循环。< / p>