ASP.NET सत्र से किसी आइटम को हटा रहा है?

कौन सी विधि को प्राथमिकता दी जाती है?

Session.Remove("foo");

Session["foo"] = null;

क्या कोई अंतर है?

0

5 उत्तर

इसका एक ही प्रभाव है। मैं व्यक्तिगत रूप से सोचता हूं कि सत्र। हटाएं विधि प्रोग्रामर के इरादे को बेहतर व्यक्त करती है।

एमएसडीएन पर दस्तावेज के कुछ लिंक यहां दिए गए हैं:

"HttpSessionState.Item Property:

Property Value Type: System.Object

The session-state value with the specified name, or null reference (Nothing in Visual Basic) if the item does not exist."

0
जोड़ा

क्या कोई अंतर है?

There is. Session.Remove(key) deletes the entry (both key & value) from the dictionary while Session[key] = null assigns a value (which happens to be null) to a key. After the former call, the key won't appear in the Session#Keys collection. But after the latter, the key can still be found in the key collection.

0
जोड़ा
इनप्रोक सत्र राज्य लोड के तहत अत्यधिक अस्थिर माना जाता है। यदि इसका दुरुपयोग होता है (हर समय होता है), तो सत्र ["foo"] = null सत्र से बेहतर प्रदर्शन करेगा। हटाएं ["foo"]। कचरा कलेक्टर अत्यधिक सत्र चर के गंदगी को साफ करना चाहिए।
जोड़ा लेखक Mark Richman, स्रोत
सरल, स्पष्ट उत्तर के लिए +1।
जोड़ा लेखक Zack Jannsen, स्रोत

मैं निकालें के साथ जाऊंगा लेकिन अगर कोई अंतर है तो ईमानदारी से यह नहीं कह सकता। अनुमान में अभी भी उस शून्य मूल्य के लिए एक खाली कुंजी रखी जा सकती है लेकिन सुनिश्चित नहीं है। निकालें मुझे थोड़ा संदेह देगा और अगर आप इसे करना चाहते हैं तो कोड में बेहतर भी पढ़ता है।

0
जोड़ा

सबसे बड़ा अंतर यह है कि आप सत्र से कैसे पढ़ते हैं।

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

या

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

If you use the first method, setting the value to null will not wयाk, and you should use remove.

यदि आप दूसरी विधि का उपयोग करते हैं, तो आप मान को शून्य पर सेट कर सकते हैं।

0
जोड़ा
HttpSessionState में ContainsKey नहीं है
जोड़ा लेखक Dave Amphlett, स्रोत

मुझे पता है कि यह पुराना धागा है लेकिन निश्चित रूप से सत्र ["कुंजी"] = शून्य के साथ चिपक जाता है - यह बहुत तेज़ है! मैंने कुछ परीक्षण किए हैं (इनप्रोक सत्र राज्य पर), पंक्ति में 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();
0
जोड़ा
सत्र में 1000 आइटम रखने का कोई कारण है?
जोड़ा लेखक zgnilec, स्रोत
@zgnilec मैं आपसे सहमत हूं लेकिन मुझे लगता है कि JakubRi बस दोनों की गति की तुलना करना चाहते हैं और हमें दिखा सकते हैं, सिवाय इसके कि मुझे लगता है कि प्रोग्रामिंग दुनिया बहुत बड़ी है और कोई भी स्पष्ट रूप से कोडिंग तरीके के बारे में बात नहीं कर सकता। यह उत्तर मेरी वर्तमान परियोजना से संबंधित नहीं है लेकिन मुझे लगता है कि यह +1 के लायक है।
जोड़ा लेखक QMaster, स्रोत
@zgnilec यह संभावना नहीं है कि प्रति सत्र कई आइटम होंगे, लेकिन यह 1000 से अधिक सत्रों की प्रक्रिया का परीक्षण करने का एक तरीका है, प्रत्येक एक अलग उपयोगकर्ता से संबंधित है।
जोड़ा लेखक Richard Duerr, स्रोत