asp.net页面中的静态变量

Ash*_*i K 17 asp.net static-variables

我对Asp.net页面中静态变量的使用存在疑问.

我有一页说UserDetails.aspx.在这个页面中,我有一个静态变量来存储特定于用户的一些数据.那么,这个变量是否会在多个用户之间共享,或者为每个用户创建一个单独的变量?

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

在这里,numberOfReviews是特定于每个用户还是将被共享?

numberOfReviews

Unm*_*kar 24

应用范围:具有应用范围的变量可在整个应用程序中使用,即跨所有页面的应用程序的所有用户.

会话范围:当许多用户连接到您的站点时,每个用户都将有一个单独的会话(与应用程序识别的用户身份相关联.)当变量具有会话范围时,它将为每个会话提供新实例,即使用户正在访问同一页面.会话变量实例可用于该会话的所有页面.

页面范围:当您在页面上有实例变量时,它仅特定于该页面并且仅限于该会话.

静态变量Application scope.应用程序的所有用户将在您的案例中共享相同的变量实例.

请注意,虽然静态变量在app域中有一个实例.因此,如果您将应用程序部署在负载平衡的Web场中,则每个应用程序域将具有该变量的单独实例.这可能会给你不正确的结果.

基于此,您应该确定变量的范围.IMO,使用静态变量是代码气味,应该不鼓励.


Ade*_*eel 18

静态变量范围是应用程序范围.numberOfReviews将在所有用户之间共享.您需要使用Session每个用户存储,因此可以在所有页面中访问它.另一方面,如果您只是在特定页面上需要它,您可以将其保存ViewState并可以在后期获取.