Sam*_*Sam 4 c# asp.net synchronization
我正在构建一个Javascript应用程序,而eash用户有一个单独的UserSession.该应用程序进行了一堆Ajax调用.每个Ajax调用都需要访问用户的单个UserSession对象.
每个Ajax调用都需要一个UserSession对象.
UserSession对象中的数据对每个用户都是唯一的.
最初,在每次Ajax调用期间,我将创建一个新的UserSession对象,并将其数据成员存储在ASP.NET Session中.但是,我发现UserSession对象正在被实例化很多.为了最小化UserSession对象的构造,我将它包装在Singleton模式中并对其进行同步访问.
我相信同步正在应用程序范围内发生,但我只需要每个用户发生这种情况.我在这里看到一篇帖子说ASP.NET缓存是同步的,但是创建对象并将其插入缓存之间的时间另一个Thread可以开始构建它的另一个对象并将其插入缓存中.
这是我正在同步访问对象的方式.有没有比使用"lock"更好的方法...应该锁定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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您不需要锁定会话状态访问权限.
会话状态的物理值在完成请求所需的时间内被锁定.锁由HTTP模块在内部管理,用于同步对会话状态的访问.
http://msdn.microsoft.com/en-us/library/aa479041.aspx
| 归档时间: |
|
| 查看次数: |
3484 次 |
| 最近记录: |