【发布时间】:2010-04-26 17:33:57
【问题描述】:
我正在构建一个 Javascript 应用程序,并且 eash 用户有一个单独的 UserSession。应用程序进行了一堆 Ajax 调用。每个 Ajax 调用都需要为用户访问单个 UserSession 对象。
每个 Ajax 调用都需要一个 UserSession 对象。
UserSession 对象中的数据对每个用户都是唯一的。
最初,在每次 Ajax 调用期间,我都会创建一个新的 UserSession 对象,它的数据成员存储在 ASP.NET Session 中。但是,我发现 UserSession 对象被实例化了很多。为了尽量减少 UserSession 对象的构造,我将它包装在单例模式中并同步访问它。
我相信同步正在整个应用程序范围内进行,但我只需要每个用户进行同步。我在这里看到一个帖子说 ASP.NET 缓存是同步的,但是在创建对象和将其插入缓存之间的时间另一个线程可以开始构建它是另一个对象并将其插入缓存。
这是我当前同步访问对象的方式。有没有比使用“锁定”更好的方法...应该锁定 HttpContext.Session 对象?
private static object SessionLock = new object();
public static WebSession GetSession
{
get
{
lock (SessionLock)
{
try
{
var context = HttpContext.Current;
WebSession result = null;
if (context.Session["MySession"] == null)
{
result = new WebSession(context);
context.Session["MySession"] = result;
}
else
{
result = (WebSession)context.Session["MySession"];
}
return result;
}
catch (Exception ex)
{
ex.Handle();
return null;
}
}
}
}
【问题讨论】:
-
为什么需要单例模式?您已经在使用直接映射到您自己的会话对象的范围/用途的会话状态对象。
-
我希望同一个用户同时有多个请求。
标签: c# asp.net synchronization