2011-11-21 55 views
2

我想知道如果有人能幫助我理解我所做的是否有很多開銷。它目前正在運行,但我不確定這是否會降低網站速度。 我有一個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; 
     } 
    } 
} 

回答

1

我不會創建依賴於你的工作流對象System.Web,你只需要把這個變量的工作流對象需要做出決策和執行業務邏輯。沒有頭頂上的傳遞對象,它們只是引擎蓋下的指針。

我可以看到的一個問題是意外地在另一個層中使用靜態圖,該層與您的Page狀態關聯,因此不允許GC清理,即:經典的內存異常或應用程序池回收。

1

正如Rick所說,如果可以避免的話,我不會在中間層對象中創建對System.Web的依賴關係。

但是,如果您無法避免它,則可以避免使用靜態System.Web.HttpContext類傳遞Session對象。這讓你做這樣的事情:

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

只要它是在同一個線程(因此在相同的情況下),從瀏覽器的請求上執行。