我正在构建一个 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 状态访问。



    http://msdn.microsoft.com/en-us/library/aa479041.aspx

    关于c# - 同步对 ASP.NET session 成员的访问,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2715532/

    10-11 06:56