Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否可以/应该在asp.net/c中使用静态类来共享数据?_C#_Asp.net_Static Classes - Fatal编程技术网

C# 我是否可以/应该在asp.net/c中使用静态类来共享数据?

C# 我是否可以/应该在asp.net/c中使用静态类来共享数据?,c#,asp.net,static-classes,C#,Asp.net,Static Classes,我的情况是:我正在建立一个供学校团体使用的在线系统。在任何时候,只有一所学校可以登录该系统,从该学校您将获得大约13个用户。然后,他们进入一个教育应用程序,在这个应用程序中,他们必须合作完成任务,并且从代码的角度来看,在所有地方共享变量 我在想,如果我用静态属性设置一个静态类来保存需要共享的变量,这可以节省我在数据库中存储/访问变量的时间,只要在应用程序启动并最终清理时静态变量都正确初始化。当然,我还必须在get和set方法上加锁,以使变量线程安全 我内心深处的某种想法告诉我,这可能是一种糟糕的

我的情况是:我正在建立一个供学校团体使用的在线系统。在任何时候,只有一所学校可以登录该系统,从该学校您将获得大约13个用户。然后,他们进入一个教育应用程序,在这个应用程序中,他们必须合作完成任务,并且从代码的角度来看,在所有地方共享变量

我在想,如果我用静态属性设置一个静态类来保存需要共享的变量,这可以节省我在数据库中存储/访问变量的时间,只要在应用程序启动并最终清理时静态变量都正确初始化。当然,我还必须在get和set方法上加锁,以使变量线程安全


我内心深处的某种想法告诉我,这可能是一种糟糕的处理方式,但我不知道确切的原因,所以如果人们能告诉我他们在这种情况下支持或反对使用静态类,非常感谢。

如果您想在您的网站上全局共享变量,您应该使用asp页面中的应用程序状态(System.Web.HttpApplicationState),该状态包含名为“Application”的变量

它的工作原理与会话变量类似,将值存储在哈希表中。唯一的问题是,为了线程安全,您必须管理锁定,但是如果我记得很清楚的话,有内置的方法或属性来锁定和解锁变量

请在此处阅读更多内容:

如果要在网站上全局共享变量,应使用asp页面中名为“Application”的变量可用的应用程序状态(System.Web.HttpApplicationState)

它的工作原理与会话变量类似,将值存储在哈希表中。唯一的问题是,为了线程安全,您必须管理锁定,但是如果我记得很清楚的话,有内置的方法或属性来锁定和解锁变量

请在此处阅读更多内容:

为什么反对使用数据库?我会认真地建议使用一个数据库,让它去吧。它不会让你的服务器屈服。要做到这一点,需要向数据库发出大量请求,即使它只是在桌面上。SQL Server Express是免费的…我并不反对使用这样的数据库,我只是觉得没有必要将数据存储在数据库中,而数据库可以很容易地存储在服务器内存中并在以后处理。我意识到,由于一次使用该系统的人太少,这里并没有真正的性能问题,我只是在寻找替代方案。为什么不喜欢使用数据库?我会认真地建议使用一个数据库,让它去吧。它不会让你的服务器屈服。要做到这一点,需要向数据库发出大量请求,即使它只是在桌面上。SQL Server Express是免费的…我并不反对使用这样的数据库,我只是觉得没有必要将数据存储在数据库中,而数据库可以很容易地存储在服务器内存中并在以后处理。我意识到,由于一次使用该系统的人太少,这里并没有真正的性能问题,我只是在寻找替代方案。也许我应该多解释一下:我没有说任何关于使用会话的内容。我知道会话是每个用户的,我只是说应用程序对象的工作原理是一样的。正如您所做的会话[“Key”]=value;要在会话中存储某些内容,请执行应用程序[“Key”]=value;不同之处在于,应用程序对象是网站的全局对象,因此从用户处插入的任何值都可以从任何其他用户处读取和修改。您还必须执行Application.Lock();和Application.Unlock();是的,但是如果他拒绝使用数据库,那么他完全有可能尝试使用会话。我想我会指出这一点。我知道出于这个原因我不能使用会话,但我正在尝试应用程序状态。我以前从未真正了解过这一点,而且它似乎非常适合目前的情况。谢谢。@StevenGilligan-有点不同意。“ASP.NET包含应用程序状态主要是为了与经典ASP兼容,以便更容易将现有应用程序迁移到ASP.NET。建议您将数据存储在应用程序类的静态成员中,而不是存储在应用程序对象中。这会提高性能,因为您可以比以前更快地访问静态变量“我可以访问应用程序字典中的一个项目。”也许我应该多解释一下:我没有说任何关于使用会话的内容。我知道会话是每个用户的,我只是说应用程序对象的工作原理是一样的。正如您所做的会话[“Key”]=value;要在会话中存储某些内容,请执行应用程序[“Key”]=value;不同之处在于,应用程序对象是网站的全局对象,因此从用户处插入的任何值都可以从任何其他用户处读取和修改。您还必须执行Application.Lock();和Application.Unlock();是的,但是如果他拒绝使用数据库,那么他完全有可能尝试使用会话。我想我会指出这一点。我知道出于这个原因我不能使用会话,但我正在尝试应用程序状态。我以前从未真正了解过这一点,而且它似乎非常适合目前的情况。谢谢。@StevenGilligan-有点不同意。“ASP.NET包含应用程序状态主要是为了与经典ASP兼容,以便更容易将现有应用程序迁移到ASP.NET。建议您将数据存储在应用程序类的静态成员中,而不是存储在应用程序对象中。这会提高性能,因为您可以比以前更快地访问静态变量可以访问应用程序字典中的项目。“