C# 静态变量在什么时候失败?

C# 静态变量在什么时候失败?,c#,static-variables,C#,Static Variables,我使用了一个静态变量,静态变量的默认值是1。然后这个变量值会根据用户登录而改变..而我的静态变量值用于根据用户登录而改变主题 public static int theme = 1; 我已经检查了5个用户同时登录它的工作正常,但我想知道当数以百万计的用户同时登录我的网站时,这个静态变量是否失败 请给我提个建议 问候,, jatin如果这是一个asp.net站点,听起来像是这样,那么您不应该为此使用静态变量 不应该使用static的原因是,它对于用户来说不是唯一的,对于连接到您网站的所有用户来说

我使用了一个静态变量,静态变量的默认值是
1
。然后这个变量值会根据用户登录而改变..而我的静态变量值用于根据用户登录而改变主题

public static int theme = 1;
我已经检查了5个用户同时登录它的工作正常,但我想知道当数以百万计的用户同时登录我的网站时,这个静态变量是否失败

请给我提个建议

问候,,
jatin

如果这是一个asp.net站点,听起来像是这样,那么您不应该为此使用
静态
变量

不应该使用static的原因是,它对于用户来说不是唯一的,对于连接到您网站的所有用户来说都是相同的变量(我相信它对于应用程序池来说是唯一的)。这意味着当一个用户更改它时,其他所有用户也会更改它

请改用会话变量:

// Set.
Session["Theme"] = 1;

// Get.
int theme = (int)Session["Theme"];
为了方便起见,您可以将其包装在静态属性中

public static int Theme
{
    get
    {
        if(Session["Theme"] == null)
            return 0;// Or an alternate default value.
        return (int)Session["Theme"];
    }
    set { Session["Theme"] = value; }
}

您提到了一个
静态
变量,并且提到了多个用户。这是一个警钟,因为
静态
变量的整个要点是有一个值(注意,见下文)。如果您的所有用户始终具有完全相同的
主题
(即,它是一个全局配置设置),那么它将正常工作;但是:这是指每用户设置,它应该是您的用户模型的属性,或者是其他每用户存储(cookies、会话状态等)


这里的警告是
[ThreadStatic]
;但这实际上不会改变场景中的任何内容,特别是在asp.net的情况下(因为线程不是用户或请求的同义词).

失败是什么意思?就像任何非显式线程安全的资源一样,您必须使用适当的同步机制来同时访问它。您是说在asp.net中登录?在web门户上使用静态变量不是一个好主意。如果不想更改此值,请使用常量。如果会话和cookie不起作用,请给我另一个值solution@JatinGadhiya定义“不工作”;这听起来很简单,好像你实施得很糟糕——它们应该工作得很好。我已经建议了另一个选项:将主题与用户对象模型相关联,但这需要一个工作标识概念,这需要使用Cookies,我在nopcommerce和nopcommerce中使用的基于依赖项注册和依赖项注册页面的主题更改无法使用会话和cookie。@JatinGadhiya pro提示:如果您绑定到具有异常行为的特定框架,请在开始时这样说。我不知道什么是/不可能与该框架。在我的情况下,会话和cookie不工作,请给我另一个solution@JatinGadhiya例如他们为什么不工作?它们应该很好用。您正在使用ASP.Net吗?是的,我正在nopcommerce中使用,并且在nopcommerce中,基于依赖项注册和依赖项注册页面的主题更改无法使用会话和cookie。