ASP.NET إزالة عنصر من الدورة ؟
-
06-07-2019 - |
سؤال
وهو الأسلوب المفضل ؟
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"]; }
إذا كنت تستخدم الطريقة الأولى، ووضع قيمة لاغية لن تنجح، ويجب عليك استخدام إزالة.
إذا كنت تستخدم الطريقة الثانية، يمكنك تعيين القيمة إلى قيمة خالية.