[英]static variable ASP.NET
在asp.net Web应用程序中,如果我想将变量存储在静态对象中是吗? 我不希望该对象与另一个请求共享其值。
public static object Objects
{
get
{
if (HttpContext.Current.Items["Objects"] != null)
return (object)HttpContext.Current.Items["Objects"];
else
{
HttpContext.Current.Items["Objects"] = new object();
return new object();
}
}
set { HttpContext.Current.Items["Objects"] = value; }
}
谢谢
静态字段在整个AppDomain中共享。 这意味着ASP.NET Web应用程序中的所有请求都将使用相同的值,并且您必须确保该变量是线程安全的。 如果这不是您想要的,请考虑以下因素:
HttpContext.Current.Session
HttpContext.Current.Items
。 这样,该值将在整个当前请求中缓存,但不会在请求之间共享。 但是,就您而言,您正在使用static
属性。 在您的情况下,此静态属性映射到HttpContext.Current.Items
,这意味着每个请求都会自动获取其自己的变量,并且变量不会共享。
换句话说,您的代码是线程安全的。
我不希望该对象与另一个请求共享其值。
那你不应该把它设为静态。
如果要使用静态变量而不在所有请求之间共享它,则可以将会话变量存储在静态属性中。 使用HttpContext.Session
进行访问。
public static object Objects
{
get
{
if (HttpContext.Current.Session["Objects"] != null)
return (object)HttpContext.Current.Session["Objects"];
else
{
var obj = new object();
HttpContext.Current.Session["Objects"] = obj;
return obj;
}
}
set { HttpContext.Current.Session["Objects"] = value; }
}
但是,您不应返回object
而应返回正确的类型,这将增加可读性,防止异常并避免始终将其强制转换为使用对象的位置。
有4个主服务器Dictionary对象,用于存储请求之间的值。 应用程序-在所有请求和用户之间共享值。 缓存-在所有请求和用户之间共享值,但是可以在不重新启动应用程序的情况下使其无效。 会话-在同一会话内的请求之间共享值,所有页面共享同一会话对象,并且是用户特定的。 ViewState-在请求之间共享值,但特定于页面和特定于用户。
如果您希望通过单个请求获得静态收益。 也就是说,只有一个请求可以访问相同的值。 请改用会话变量。
Session['variable'] = value
这会将值存储在当前会话中,这样您的每个请求的值将有所不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.