先ほどは
- 局所スコープ
- 関数スコープ
- クラススコープ
- アプリケーションスコープ
と4つのスコープを意識し用という話をしつつ脱線しましたが話を戻します。
ここにあげた4つのスコープはあくまで単体アプリケーションの場合を意味します。
Webアプリケーションの場合にはさらに増えることになります。
古来のASPより一般的に利用されるのはSessionというスコープです。
これはユーザが利用開始より利用終了までの間生存しているというものです。
- 局所スコープ
- 関数スコープ
- クラススコープ
- セッションスコープ
- アプリケーションスコープ
Webアプリケーションの場合複数のユーザが同時にアプリケーションにアクセスします。
アプリケーションではユーザ情報を管理してはいけないことになります。
セッション変数はそのユーザ処理にとってはグローバル変数になるので、入念な設計が必要です。
セッション変数への格納名が同じで上書きしちゃったなんてことのないように。
#ただし、ASP.Netではメモリの6割が利用されることによりIISのアプリケーションプールが再起動されて、セッション情報は失われてしまいます。
#これらを回避するにはステートサーバというSQLServerにセッション情報を格納する方法を取るより他はないとされています。
- 局所スコープ
- 関数スコープ
- クラススコープ
- ビューステートスコープ
- セッションスコープ
- アプリケーションスコープ
ビューステートはASP.Netがページ内に閉じた世界で持ちまわってくれます。
別のページに持っていく場合にはRequestに付加するなりして持っていかなければもってはいけませんが、ページ内で閉じた世界ではかなり有効に働きます。
ただパフォーマンス的にはいちいち持っておろしているので、Sessionの非ではありません。残念ながら。
このようにWebアプリケーションになるとそのスコープは増加します。
増加するといっても基本は同じでスコープが広がると影響が大きくなり、スコープが小さくなると影響も小さくなるということです。
適切な設計を行いより小さなスコープを生かしましょう。