会话状态删除和增加开销

时间:2009-02-04 18:55:39

标签: asp.net session-state

以下是我通常如何处理会话状态中的对象,我有一个const字符串作为会话名称,然后有一个属性,其中包含对象的get和set。

我想知道的是,是否需要'Session.Remove()'调用(以保持干净整洁)以及是否存在大量开销并进行此删除。

我有Session.Remove那里基本上因为它让我感觉更好(OCD我知道),并让我觉得会话更干净,但我想知道是否不需要。

private const string sesMyObject = "{C2CC72C3-1466-42D4-8579-CAA11F261D55}";
public MyObject MyObjectProperty
{
    get
    {
        return Session[sesMyObject] as MyObject;
    }
    set
    {
        Session.Remove(sesMyObject);
        Session.Add(sesMyObject, value);
    }
}

修改 根据下面的答案,我已将我的属性更改为以下内容:

private const string sesMyObject = "{C2CC72C3-1466-42D4-8579-CAA11F261D55}";
public MyObject MyObjectProperty
{
    get
    {
        return Session[sesMyObject] as MyObject;
    }
    set
    {
        Session[sesMyObject] = value;
    }
}

谢谢!

3 个答案:

答案 0 :(得分:2)

如果确实想要安全,请尝试将对象转换为IDisposable,如果成功,请调用Dispose。

IDisposable sesDispObj =  Session[sesMyObject] as IDisposable;
if (sesDispObj != null)
   sesDispObj.Dispose();

除此之外,

 Session[sesMyObject] = value

几乎相同
 Session.Remove(sesMyObject);        
 Session.Add(sesMyObject, value);

答案 1 :(得分:2)

这太过分了。参考MSDN

  

如果name参数引用了   现有会话状态项,   现有项目被覆盖   指定值。

答案 2 :(得分:1)

Session[sesMyObject] = value;

更短,更易于阅读,性能稍好一些,但除非此代码连续重复多次,否则不应有所作为。