2011-10-06 16 views
1

私の現在のasp.netアプリケーションでは、session variablesSQL serverに保存しています。 InProcを指定すると、セッションはサーバーメモリに保存されますが、out of proc(私の場合)のセッションはSQLサーバーに保存されます。アウトオブプロセスのセッション変数はメモリの問題を引き起こしますか?

これは本当ですか?セッションアクセス(基本的にすべてのページ要求)を必要とするすべての要求で、私が読んだものから、セッションがdbから非直列化され、要求が完了したら元に戻します。つまり、値が取得されると、Webサーバーにその値が保持されます。これはInProcとどう違うのですか?

Out of Procについては、1つのセッション変数が要求されたときにのみそれを取得しますか?それ以外の場合は、InProcと同じように私に聞こえます。私は何が欠けている。

+0

(サーバーファーム上で実行されている特別なサービスによってメモリに格納されている)StateServerモードを実行することもできます(ファームの問題/プロセスの問題などによる)。 ) – dlev

+0

はい、私の主なポイントは、主に、要求の期間だけではあるが、サーバーが他のモードのためのメモリにセッション変数を持っていると言うことでした。 –

+0

さて、確かに。コードはIISワーカープロセスのサーバーノードで実行されています。ある時点で、そのプロセスはメモリ内のデータを必要とします。どのように他のことができますか? – dlev

答えて

4

これは本当ですか?

はい、該当します。

私は(基本的にすべてのページリクエスト)セッションアクセス を必要とするすべての要求で、読んだものから、

が デシベルからセッションをデシリアライズし、要求が完了すると戻ってそれを保存します。つまり、 の値が取得されると、その値はWebサーバー上に保持されます。 これはInProcとどのように違うのですか?

値は、HTTP要求の間だけメモリに格納されます。要求の開始時にSQL Serverからロードされ、要求の最後にSQL Serverに保存されます。これは、値が要求間でメモリに保持されるInProcとは異なります。また、同じユーザーからの異なる要求がサーバーファーム内の異なるノードによって処理されるため、SQL Serverを使用すると、ファームのすべてのノードが同じセッション値を共有することが保証されます。

+0

サーバが1分間に多くの要求を受け取ると仮定すると、同じ効果は生じません。要求の期間中、サーバーのメモリーにはセッション変数が含まれます。私は、あまりにも多くのトラフィックを持つサイトの場合は、procの外にオーバーヘッドが増えると思います。はい、複数のノードがある場合、オプションはありません。 –

+0

@AlexJの場合、セッションごとに値がロードされます。したがって、サーバーがさまざまなユーザーから多くのトラフィックを取得した場合、各要求はSQL Serverから対応するセッション値をフェッチします。もちろん、SQLStateはInProcと比較してオーバーヘッドを追加します。しかし、これはウェブファームにとって最も堅牢なソリューションです。 StateServerは、セッションが特別なサーバーのメモリに保存され、SQLStateと比較して高速ですが、信頼性と信頼性が低いWebファームでも使用できます。 –

関連する問題