那时静态变量失败了?

时间:2014-07-11 09:22:57

标签: c# static-variables

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

public static int theme = 1;

我已经检查了5个用户登录,但同时工作正常,但我想知道数百万用户在我的网站中同时登录该静态变量是否失败?

请给我建议

的问候, jatin

2 个答案:

答案 0 :(得分:5)

您提到static变量,并提及多个用户。这是一个警钟,因为static变量的整个点是一个值(警告,见下文)。如果所有用户总是具有完全相同的theme(即它是全局配置设置),它将正常工作;但是:它应该是一个每用户设置,它应该是您的用户模型的属性,或其他一些用户存储(cookie,会话状态等)。

这里的警告[ThreadStatic];但真的并没有改变你的场景中的任何东西,特别是如果这是asp.net(因为线程不是用户或请求的同义词)。

答案 1 :(得分:2)

如果这是一个听起来像的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; }
}