【发布时间】:2011-04-30 22:03:31
【问题描述】:
如果我的类具有在用户加载特定页面时设置的静态属性,那么该静态值对于该用户会话是否唯一?
换句话说,如果第二个用户随后加载页面并设置静态属性,每个用户会有不同的值,还是都使用第二个用户值?
【问题讨论】:
-
您是否阅读过文档或自己尝试过?
标签: c# asp.net static properties
如果我的类具有在用户加载特定页面时设置的静态属性,那么该静态值对于该用户会话是否唯一?
换句话说,如果第二个用户随后加载页面并设置静态属性,每个用户会有不同的值,还是都使用第二个用户值?
【问题讨论】:
标签: c# asp.net static properties
静态对于应用程序域是唯一的,该应用程序域的所有用户将共享每个静态属性的相同值。当您看到静态一词时,请想“只有一个实例”。该实例持续多长时间是一个单独的问题,但简短的回答是它是可变的。
如果您想存储特定于用户的值,请查看Session State。
【讨论】:
除了鲍勃的回答,当然还有这个例外:
public static object Item {
get { return HttpContext.Current.Session["some_key"]; }
}
【讨论】:
HttpContext.Current 本身,以及DateTime.Now。静态字段是共享的(除非用ThreadStatic 属性修饰),但静态属性可以为所欲为。
静态字段和属性在类的所有实例之间共享。您的所有用户最终将共享相同的价值。
该值将一直存在,直到 ASP.NET 工作进程自行回收(周期性发生)。
【讨论】:
不,这没什么特别的,因为它是 asp.net。 ASP.NET 本身只是一个常规的 .NET 程序集集合。如果您想为每个会话保存内容,那么您应该使用会话状态。如果没有,请小心,因为有许多线程可以访问您的静态数据。您应该阅读并了解线程、锁和竞争条件如何协同工作。
【讨论】: