18

Asp.netページでの静的変数の使用について疑問があります。

UserDetails.aspxという1つのページがあります。このページには、ユーザーに固有のデータを格納するための静的変数が1つあります。では、この変数は複数のユーザー間で共有されるのでしょうか、それともユーザーごとに個別の変数が作成されるのでしょうか。

  public partial class UserDetails : System.Web.UI.Page
    {
       static int numberOfReviews=0;
       protected void Page_Load(object sender, EventArgs e)
         {
            numberOfReviews= GetReviews();
         }
    }

ここで、numberOfReviewsは各ユーザーに固有ですか、それとも共有されますか?

numberOfReviews

4

5 に答える 5

26

アプリケーションスコープ:アプリケーションスコープを持つ変数は、アプリケーション全体で使用できます。つまり、すべてのページのアプリケーションのすべてのユーザーが使用できます。

セッションスコープ:多くのユーザーがサイトに接続すると、各ユーザーは個別のセッションを持ちます(アプリケーションによって認識されるユーザーのIDに関連付けられます)。変数にセッションスコープがある場合、セッションごとに新しいインスタンスがあります。ユーザーが同じページにアクセスしている場合でも。セッション変数インスタンスは、そのセッションのすべてのページで使用できます。

ページスコープ:ページにインスタンス変数がある場合、それはそのページのみとそのセッションのみに固有です。

静的変数にはApplication scope。この場合、アプリケーションのすべてのユーザーが同じ変数インスタンスを共有します。

静的変数にはアプリドメインに1つのインスタンスがありますが、注意してください。したがって、負荷分散されたWebファームにアプリケーションをデプロイしている場合、各アプリドメインには変数の個別のインスタンスがあります。これにより、誤った結果が得られる可能性があります。

これに基づいて、変数をどのスコープに含めるかを決定する必要があります。IMO、静的変数の使用はコードの臭いであり、推奨されません。

于 2011-03-07T09:06:53.157 に答える
18

静的変数スコープはアプリケーション全体です。numberOfReviewsすべてのユーザー間で共有されます。Sessionユーザーごとに保存するために使用する必要があるため、すべてのページでアクセスできます。一方、特定のページで必要な場合は、保存してポストバックでViewState取得できます

于 2011-03-07T09:04:17.407 に答える
2

Application ["some_id"]と同じように、アプリケーション全体で共有されます。

これには通常のint変数を使用します。

于 2011-03-07T09:07:21.650 に答える
1

Adeelがすでに述べたように、静的(またはVB.Netで共有される)変数はアプリケーション全体です。つまり、これらはすべてのユーザーで同じであり、Webサーバーが停止するか、最後のセッションが中止されるまで存在します。

セッションを使用して、現在のユーザーに属する変数を保存できます。

他のユーザーのnumberOfReviews(管理者または統計用のfe)にアクセスする必要がある場合は、データベース、asp.net-cache、またはユーザーIDをキーとする単純な静的辞書を使用できます。

于 2011-03-07T09:10:48.333 に答える
0

通常、これを行うにはデータベースが使用されます

Data Table
userId | UserViews

また、静的変数を使用することもできます。その場合、データをアプリケーション状態で保存する必要があります。つまり、urが再起動するたびに、データ全体がリセットされます。

于 2011-03-07T09:07:00.060 に答える