سؤال

وهو الأسلوب المفضل ؟

Session.Remove("foo");

Session["foo"] = null;

هل هناك فرق ؟

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

المحلول

<اقتباس فقرة>   

هل هناك فرق؟

وهناك. Session.Remove(key) حذف الإدخال (سواء رئيسي والقيمة) من القاموس بينما Session[key] = null بتعيين قيمة (الذي صادف أن يكون فارغة) إلى مفتاح. بعد المكالمة السابقة، لن تظهر المفتاح في جمع Session#Keys. ولكن بعد هذا الأخير، لا يزال من الممكن العثور على المفتاح في الحصول على المفتاح.

نصائح أخرى

أنا أعلم أن هذا الموضوع القديم ولكن بالتأكيد عصا مع Session["key"] = null - انها أكثر من ذلك بكثير أسرع!لقد فعلت بعض الاختبارات (في حالة جلسة العمل InProc) ، وإزالة 1000 العناصر في صف (الوقت المنقضي هو 1000 البنود تماما ، لذلك إذا كنت تريد متوسط الوقت للحصول على عنصر واحد فقط تقسيمه مع 1000):

إزالة 1000 العناصر الموجودة:

Session[key] = null; - 0.82380000000000009 ms
Session.Remove(key); - 59.960100000000004 ms

إزالة 1000 لا العناصر الموجودة:

Session[key] = null; - 1.5368000000000002 ms
Session.Remove(key); - 0.6621 ms

إزالة 500 القائمة و 500 لم العناصر الموجودة:

Session[key] = null; - 1.0432000000000001 ms
Session.Remove(key); - 33.9502 ms

هنا هو قطعة من رمز الاختبار الأول:

Session.Clear();

for (int i = 0; i < 1000; i++)
    Session[i.ToString()] = new object();

Stopwatch sw1 = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
    Session[i.ToString()] = null;
sw1.Stop();

Session.Clear();

for (int i = 0; i < 1000; i++)
    Session[i.ToString()] = new object();

Stopwatch sw2 = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
    Session.Remove(i.ToString());
sw2.Stop();

واود ان اذهب مع إزالة ولكن لا يمكن أن أقول بصراحة إذا كان هناك فرق. في تخمين قد تكون هناك مفتاح فارغة الاحتفاظ بها لتلك القيمة لاغية ولكن لست متأكدا. إزالة من شأنه أن تعطيني القليل من الشك واذا كان هذا ما كنت تريد أن تفعل ذلك على يقرأ أفضل في كود كذلك.

ولها نفس التأثير.أنا شخصيا أعتقد أن Session.Remove طريقة لا تعبر عن مبرمج النية أفضل.

هنا بعض الروابط وثائق MSDN:

"HttpSessionState.البند الملكية:

قيمة العقار نوع:النظام.وجوه

الدورة-قيمة الدولة مع الاسم المحدد ، أو مرجع فارغة (لا شيء في Visual Basic) إذا كان العنصر غير موجود."

وأكبر الفرق هو كيف تقرأ من الدورة.

if(Session.ContainsKey["foo"]) { return Session["foo"]; }

أو

if(Session["foo"] != null) { return Session["foo"]; }

إذا كنت تستخدم الطريقة الأولى، ووضع قيمة لاغية لن تنجح، ويجب عليك استخدام إزالة.

إذا كنت تستخدم الطريقة الثانية، يمكنك تعيين القيمة إلى قيمة خالية.

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