我对Asp.net页面中静态变量的使用有一个疑问。
我有一个页面写着UserDetails.aspx。在这个页面中,我有一个静态变量来存储特定于用户的一些数据。那么,这个变量是在多个用户之间共享,还是为每个用户创建一个单独的变量呢?
public partial class UserDetails : System.Web.UI.Page
{
static int numberOfReviews=0;
protected void Page_Load(object sender, EventArgs e)
{
numberOfReviews= GetReviews();
}
}
在这里,numberOfReviews是特定于每个用户还是共享?
numberOfReviews
发布于 2011-03-07 17:04:17
静态变量的作用域是应用程序范围的。numberOfReviews
将在所有用户之间共享。您需要使用Session
来存储每个用户,所以它可以在所有页面中访问。另一方面,如果你只是需要在特定的页面上使用它,你可以将它保存在ViewState
中,并可以在post中获取它。
发布于 2011-03-07 17:06:53
应用范围:具有应用范围的变量在整个应用程序中都可用,即所有页面上的应用程序的所有用户都可以使用。
会话作用域:当许多用户连接到您的站点时,他们中的每个人都将有一个单独的会话(与应用程序所识别的用户身份相关联)。当变量具有会话作用域时,它将为每个会话提供新的实例,即使用户正在访问相同的页面。会话变量实例在该会话的所有页面上都可用。
页面作用域:当页面上有一个实例变量时,它仅特定于该页面和该会话。
静态变量有Application scope
。在您的情况下,应用程序的所有用户都将共享相同的变量实例。
请注意,尽管静态变量在应用程序域中有一个实例。因此,如果您的应用程序部署在负载平衡的web场上,则每个应用程序域都将有一个单独的变量实例。这可能会给出不正确的结果。
根据这一点,你应该决定你的变量应该在什么范围内。在我看来,使用静态变量是一种代码味道,应该不鼓励使用。
发布于 2011-03-07 17:07:22
它将像应用程序“some_id”一样在整个应用程序范围内共享。
为此,请使用普通的int变量。
https://stackoverflow.com/questions/5217697
复制相似问题