2

私がやっていることのオーバーヘッドが大きいかどうかを誰かが理解するのを手伝ってくれるかどうか疑問に思っていました。現在動作していますが、これによりサイトの速度が低下するかどうかはわかりません. すべてのセッション変数を設定するworkflowobjクラスがあります。このクラスは、必要なページでインスタンス化されます。

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

これが必要なのは、セッション変数を追跡できると同時に、より複雑なページ ワークフローを 1 か所で追跡できる必要があるためです。このソリューションはすでに機能していますが、唯一の問題は、セッションと応答オブジェクトを通過することで多くのオーバーヘッドが発生するかどうかわからないことです。これがひどく非効率的かどうか誰か教えてもらえますか?? 以下は、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

Rick が言うように、System.Web回避できるのであれば、中間層オブジェクトに依存関係を作成しません。

しかし、それを避けることができない場合は、静的System.Web.HttpContextクラスを使用して Session オブジェクトの受け渡しを避けることができます。これにより、次のようなことができます。

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

ブラウザからのリクエストと同じスレッドで(したがって同じコンテキストで)実行されている限り。

于 2011-11-21T21:57:34.207 に答える
1

ワークフロー オブジェクトに依存関係を作成するのではなくSystem.Web、ワークフロー オブジェクトが意思決定を行い、ビジネス ロジックを実行するために必要な変数を渡すだけです。オブジェクトを渡すオーバーヘッドはありません。それらはボンネットの下の単なるポインターです。

発生している可能性のある問題の 1 つは、状態に関連付けられた別のレイヤーで静的を誤って使用したためPage、GC がクリーンアップできなかったことです。つまり、従来のメモリ不足の例外またはアプリ プールのリサイクルです。

于 2011-11-21T20:02:00.497 に答える