asp.net - ASP.NET页面中的静态变量

标签 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();
         }
    }

这里,numberOfReviews 是特定于每个用户的还是会共享?

numberOfReviews

最佳答案

应用程序范围:具有应用程序范围的变量在整个应用程序中可用,即对所有页面上的应用程序的所有用户可用。

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

页面范围:当页面上有实例变量时,它仅特定于该页面和该 session 。

静态变量具有应用程序范围。在您的案例中,应用程序的所有用户都将共享相同的变量实例。

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

基于此,你应该决定你的变量应该在什么范围内。IMO,使用静态变量是一种代码味道,应该不鼓励。

关于asp.net - ASP.NET页面中的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5217697/

相关文章:

c# - 将二进制字段绑定(bind)到 ASP.NET DataGrid 导致错误

c# - 获取之前在应用程序 c# 中抛出的异常?

javascript - 将 ByteArray 从 Knockout.js 发布到 Web 服务

c# - 反向查找 asp.net 路由 url

asp.net - 为什么 ASP.NET View 引擎检查 .Mobile.cshtml View 路径?

android - 当应用程序崩溃时,应用程序范围内的静态变量为空

inheritance - 重写派生类中的静态字段时出现“...不正确地扩展基类静态端”错误

c# - Constants 类中的静态属性是否应该实现支持字段?

java - 这是初始化静态变量的有效方法吗?

c++ - 未命名命名空间优于静态命名空间?