سؤال

فيما يلي كيف أتعامل مع الكائنات في حالة الجلسة ، لديّ سلسلة const كاسم جلسة ثم لدي خاصية بها الحصول على الكائن.

ما كنت أتساءل هو إذا كانت الدعوة "session.remove ()" ضرورية (للحفاظ على الأشياء نظيفة ومرتبة) وإذا كان هناك حمولة كبيرة وقام بإزالة هذه الإزالة.

لديّ الجلسة. الإزالة هناك بشكل أساسي لأنها تجعلني أشعر بتحسن (الوسواس القهري الذي أعرفه) ، ويجعلني أشعر أن الجلسة أكثر نظافة ، لكنني أود أن أعرف ما إذا كانت هناك حاجة إليها.

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;
    }
}

شكرًا!

هل كانت مفيدة؟

المحلول

اذا أنت حقًا تريد أن تكون آمنة ، حاول تحويل الكائن إلى idisposable ، وإذا نجح ، استدعاء التخلص.

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

بخلاف ذلك،

 Session[sesMyObject] = value

إلى حد كبير مثل

 Session.Remove(sesMyObject);        
 Session.Add(sesMyObject, value);

نصائح أخرى

إنه مبالغة. تشير MSDN

إذا كانت المعلمة الاسم تشير إلى عنصر حالة الجلسة الحالي ، فسيتم كتابة العنصر الحالي مع القيمة المحددة.

Session[sesMyObject] = value;

أقصر وأبسط القراءة ، ويجب أن يكون له أداء أفضل قليلاً ، ولكن ما لم يتم تكرار هذا الرمز عدة مرات في التوالي ، فإنه لا ينبغي أن يحدث فرقًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top