ASP.NET C# 中是否共享变量?

Is variable shared in ASP.NET C#?

当我定义一个变量如下:

public static int x;

程序运行正常,但变量被进入该站点的用户共享。 所以当用户同时访问时,程序不工作。

如果我定义一个变量如下:

private int x;

程序无法正常运行。例如,无法找到 checkbox true 的位置。

以下代码用于查找用户检查最近更改的位置。

public static CheckBox[,] cbs = new CheckBox[14, 28];
public static bool[,] diffmap = new bool[14, 28];

private CheckBox[,] cbs = new CheckBox[14, 28];
private bool[,] diffmap = new bool[14, 28];



protected void CBs_CheckedChanged(object sender, EventArgs e)
{
    int cur_x = 0;
    int cur_y = 0;

    int num_reserve = 0;

    for (int i = 0; i < 14; i++)
    {
        for (int j = 0; j < 28; j++)
        {
            if (cbs[i, j].Checked != diffmap[i, j])
            {
                cur_x = i;
                cur_y = j;
                break;
            }
        }
    }


    for (int i = 0; i < 14; i++)
    {
        for (int j = 0; j < 28; j++)
        {
            diffmap[i, j] = cbs[i, j].Checked;
        }
    }

}

而不是 privatestatic,将这些内容保留在 Session

请记住,在 ASP.Net WebForms 每次处理任何事件时,您都会有一个 class[=28 的 新实例 =].每次事件 运行 时,class 都会从头开始重新构建,而 ASP.Net 对这个过程的私有成员一无所知;它只知道连接到 ViewState 的服务器控件。

因此,您还希望尽量减少处理的事件数量,因为每个事件重建 class 实例既昂贵又缓慢:您必须添加完整的用户和您的服务器之间的往返延迟,加上您的代码在每次事件响应之前花费 运行 的时间,并且浏览器(通常)必须重建整个页面。 相反,想想你可以通过 Javascript.

做多少

制作一些东西 static 没有帮助,因为静态在 整个应用域 之间共享,这将包括多个用户。

请查看 Session and state management in ASP.NET Core,特别是 会话状态 部分。

Session state

Session state is an ASP.NET Core scenario for storage of user data while the user browses a web app. Session state uses a store maintained by the app to persist data across requests from a client. (...more important information here...)