【问题标题】:Static variable Behaviour in Asp.NetAsp.Net 中的静态变量行为
【发布时间】:2013-04-05 20:43:14
【问题描述】:

我有一个 OperationHelper 类,如下所示:

public class OperationHelper
    {
        /// <summary>
        /// Gets or sets the Add Operation value
        /// </summary>
        public static bool AddOperation { get; set; }

        /// <summary>
        /// Gets or sets the Edit Operation value
        /// </summary>
        public static bool EditOperation { get; set; }

        /// <summary>
        /// Gets or sets the Delete Operation value
        /// </summary>
        public static bool DeleteOperation { get; set; }

        /// <summary>
        /// Gets or sets the Select Operation value
        /// </summary>
        public static bool SelectOperation { get; set; }
    }

在每次请求时,都会重新分配这些值。当我在本地运行它时,它可以正常工作。 但是当我发布代码时,一些值没有被分配或无法正常工作。

所以想知道C#在Asp.Net中静态变量的行为。

静态变量是否等于所有用户都可以访问的全局变量?如果用户 A 将其设置为 true,则用户 B 可以将该值设为 True,或者它具有不同的变量实例。

【问题讨论】:

    标签: c# asp.net static static-variables


    【解决方案1】:

    static 变量的行为是,一旦到达它们所属的代码,它们就会被创建。为了解决您的问题,请考虑为您的班级使用static constructor,以根据您的需要正确初始化所有值

    public class OperationHelper
    {
        /// <summary>
        /// Gets or sets the Add Operation value
        /// </summary>
        public static bool AddOperation { get; set; }
    
        /// <summary>
        /// Gets or sets the Edit Operation value
        /// </summary>
        public static bool EditOperation { get; set; }
    
        /// <summary>
        /// Gets or sets the Delete Operation value
        /// </summary>
        public static bool DeleteOperation { get; set; }
    
        /// <summary>
        /// Gets or sets the Select Operation value
        /// </summary>
        public static bool SelectOperation { get; set; }
    
        static OperationHelper() {
        //initialize your static variables here
        }
    }
    

    请参阅 here 以获取有关 static 构造函数的参考。

    【讨论】:

    • 如果用户 A 将其设置为 true,用户 B 是否可以将该值设为 True,或者它具有不同的变量实例。?
    • static 对象未绑定到实例,它们对每个主体都具有相同的值。
    • 在 ASP.NET 中并非特别如此,因为该网站是为来自不同浏览器的每个请求创建的,因此不会发生美国的某个人会像印度的某个人那样具有价值,因为例子。
    【解决方案2】:

    所以想知道静态变量在 Asp.Net 中的行为 C#。

    是静态变量,等于全局变量,可以访问 所有用户?如果用户 A 将其设置为 true,则用户 B 可以将该值作为 True 或者它有不同的变量实例。

    只有当您的在一个工作进程下运行您的网站在您的池中时,才会出现这种行为。

    如果您的池有多个工作进程,那么每个进程都有它们的静态值,并且您不知道每个请求和每个用户分配了哪个进程。并且一起处理它们不是交流的。

    假设您有一个包含 4 个工作进程的池。

    UserA 请求页面,进程 1 正在重播并将静态值设置为 A。
    UserB请求页面,进程1为replay,静态值为A。
    用户A请求页面,进程2正在回放,静态值未设置。

    等等。 更多关于这个主题: Lifetime of ASP.NET Static Variable
    Where are static variables stored in asp.net aspx page
    Using static variables instead of Application state in ASP.NET
    Static methods on ASP.NET web sites
    Asp.net static object appears sometimes as non global

    【讨论】:

      【解决方案3】:

      静态变量只创建一次。所以userB 将获得相同的变量实例来回答您的问题。

      更多相关内容已在here 进行了讨论。

      【讨论】:

        【解决方案4】:

        您需要考虑为每个访问该网站的用户提供不同价值的会话

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-25
          • 2012-01-20
          • 1970-01-01
          • 1970-01-01
          • 2011-04-07
          • 2014-09-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多