我正在构建一个 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;
}
}
}
}
最佳答案
您不需要锁定 session 状态访问。
The physical values of a session state are locked for the time needed to complete a request. The lock is managed internally by the HTTP module and used to synchronize access to the session state.
关于c# - 同步对 ASP.NET session 成员的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2715532/