2009-04-20 21 views
2

特定の時間に同時セッションの量を知りたい。しかし、おそらくクモとロードバランサ、それがグローバルasaxでこれを行うことがいかに安全で、知らないの影響を受けた:セッションを安全にカウントする方法:Session_Start/End in Global.Asaxは安全で安全ですか?

void Session_Start(object sender, EventArgs e) 
{ 
    counter++; 
} 

void Session_End(object sender, EventArgs e) 
{ 
    counter--; 
} 

任意のヒント?

答えて

1

セッションをデータベースサーバーまたは状態サーバーに保存している場合、Session_Endイベントは発生しません。そうでなければ問題はないと思う。

また、カウンタをデクリメント/インクリメントしながら、あなたがこのようなオブジェクトのロックを取得する必要があります -

lock(<some shared object>) 
{ 
    counter++; 
} 

またthisを見てみてみることができます。

+1

'global.asax'アプリケーションオブジェクトをロックしていますか? ASP.NETアプリケーションでは絶対にno-noです! –

2

少なくとも、この解決策は、(あなたが言及したと私はカバーしないので、あなたに影響を与える可能性のあるその他の問題の横に)スレッドの問題があります。

インクリメントとデクリメントタスクを使用して、原子方法で行うべきです++または--ではなく、Interlocked.IncrementおよびInterlocked.Decrementメソッドを使用します。

+0

コードスニペットを変更しました。 – Kirtan

関連する問題