静态变量导致mvc中的并发问题

时间:2014-10-14 12:53:15

标签: c# asp.net-mvc asp.net-mvc-4 oop static-variables

我们使用mvc4开发Web应用程序。在许多情况下,我们将从First Page / View中的用户获得价值,我们需要保留一些变量,直到用户到达最终页面/视图。他/她可以通过4-5个视图从第一个视图到达最终视图。

保持MVC中的值。我们有三种方式。

1。全局变量 - 但是如果我在一个动作方法中赋值。该值将在另一个操作方法中重置。所以我们放弃了它。

2.Session - 但我们需要在每个会话中保留5个以上的值。所以我们放弃了它。

3.Static Varibale - 这就像魅力一样。但是在多用户中它导致了并发问题。

mvc中还有其他方法可以保持价值吗?请指导我。

1 个答案:

答案 0 :(得分:5)

静态变量将在应用程序域的生命周期中持续存在,这就是您看到多个用户的并发问题的原因。

请参阅:Static Variables and their implications in ASP.Net websites

在会话中存储五个值应该没有任何问题。您可以拥有List<T>并将其存储在会话中。像:

List<string> someValues = new List<string> {"A","B","C","D", "E",};
HttpContext.Current.Session["userValues"] = someValues;

要检索它:

var someValues =  HttpContext.Current.Session["userValues"] as List<string>;
if(someValues != null)
{
 // found
}

您唯一应该考虑的是数据的大小。会话存储在服务器级别为每个用户,存储太多数据可能会导致问题,但这取决于您的配置。

您可能还会看到:What is ViewData, ViewBag and TempData? – MVC options for passing data between current and subsequent request