2010-05-12 24 views
6

मेरे पास एक वेब एप्लिकेशन है जहां मैं डेटाबेस से उपयोगकर्ता सेटिंग्स खींचना चाहता हूं और उन्हें वैश्विक पहुंच के लिए स्टोर करना चाहता हूं। क्या यह सिंगलटन, या सत्र ऑब्जेक्ट में डेटा स्टोर करने के लिए अधिक समझदारी करेगा? दोनों के बीच क्या अंतर है?सत्र बनाम सिंगलटन पैटर्न

क्या डेटा को ऑब्जेक्ट संदर्भ के रूप में संग्रहीत करना या मूल्य प्रकार ऑब्जेक्ट्स (इनट्स और स्ट्रिंग्स) में इसे तोड़ना बेहतर है?

उत्तर

11

सत्र। यही वह है। सत्र को वैश्विक कैश (मूल रूप से एक सिंगलटन) में संग्रहीत किया जाता है, जो सत्र आईडी द्वारा की जाती है। इस तरह, आपको ब्याज के सत्र के लिए केवल डेटा मिलता है। एक सिंगलटन का उपयोग मूल रूप से वैश्विक कैश को दोहराना होगा और आपको स्वतंत्र रूप से प्रत्येक सत्र के लिए डेटा पुनर्प्राप्त करने के लिए तंत्र को पुन: पेश करना होगा।

आगे बढ़ें और ऑब्जेक्ट को स्टोर करें। सत्र को उस चीज़ को क्रमबद्ध करने की चिंता करें जिसे पुनर्स्थापित किया जा सकता है। सावधान रहें, हालांकि, आपने सत्र में जो कुछ रखा है उसके साथ। आप वहां बहुत अधिक डेटा स्टोर नहीं करना चाहते हैं या आप बहुत मेमोरी का उपयोग करेंगे (एक मेमोरी कैश मानते हैं)।

4

यदि इन सेटिंग्स का उपयोग साइट के सभी उपयोगकर्ताओं के लिए किया जाएगा, तो उन्हें सिंगलटन या एप्लिकेशन कैश में रखें। यदि वे प्रत्येक उपयोगकर्ता के लिए विशिष्ट हैं, तो उन्हें सत्र में रखें।

ऐप या सत्र कैश में जोड़ने पर ऑब्जेक्ट संदर्भों का उपयोग करें - मेरा मानना ​​है कि मान प्रकारों को बॉक्स किया जाएगा ताकि वे कैश में ऑब्जेक्ट्स की तरह दिखें। यदि आप सिंगलटन का उपयोग करते हैं, तो यह किसी भी तरह से जा सकता है।

2

सत्र वस्तु, निश्चित रूप से।

सिंगलटन प्रक्रिया स्तर पर मौजूद हैं। इसका अर्थ यह है कि यदि आपके पास किसी भी पल में 20 उपयोगकर्ता आपकी साइट तक पहुंच रहे हैं, तो वे एक ही सिंगलटन ऑब्जेक्ट का उपयोग कर रहे हैं। यदि आप वेब विकास नहीं कर रहे हैं तो इस अवधारणा में उपयोग करना मुश्किल है।

सत्र उपयोगकर्ता स्तर पर मौजूद हैं। इसका मतलब है कि आप प्रति उपयोगकर्ता डेटा प्रति उपयोगकर्ता डेटा स्टोर कर सकते हैं।

+0

[आवेदन स्थिति] (https://msdn.microsoft.com/en-us/library/ms178594.aspx?f=255&MSPPError=-2147217396) एएसपी .NET प्रक्रिया में 'सिंगलटन' का एक शानदार उदाहरण है) स्तर। किसी भी प्रकाश-भार कुंजी मूल्य जोड़ी का मतलब वेबसाइट के सभी उपयोगकर्ताओं के लिए किया जा सकता है। ये कुंजी-मूल्य जोड़े वेब कॉल पर पहुंच योग्य रहेगा।भारी वजन या संसाधन गहन वस्तुओं के लिए किसी को [कैश] (https://msdn.microsoft.com/en-us/library/ms178597.aspx) का उपयोग करने पर विचार करना चाहिए। – RBT

0

कभी-कभी मुझे नीचे दी गई विधि पसंद है। यह जादू तारों के साथ समस्याओं का ख्याल रखता है और सत्र चर को अनसेट करता है। यह एप्लिकेशन स्तर की बजाय सत्र स्तर पर सिंगलटन भी चलाता है।

public static SessionHandler GetInstance() 
    { 
     if (HttpContext.Current.Session["SessionHandler"] == null) 
     { 
      HttpContext.Current.Session["SessionHandler"] = new SessionHandler(); 
     } 
     return (SessionHandler)HttpContext.Current.Session["SessionHandler"]; 
    } 

फिर इसे सामान्य सिंगलटन के रूप में उपयोग करें। आपको आवश्यक चरों में डाल देना।

0

यह पुराने दस्तावेज़ से लिया गया है लेकिन यह अभी भी बहुत मान्य है और एक इलाज करता है ... मैं यहां लिंक सामग्री डालूंगा, खासकर क्योंकि यह एक पुराना लिंक है जो गायब हो सकता है। Taken from here.

पृष्ठभूमि

ASP.Net में सत्र वस्तु जानकारी है कि साइट के किसी एक उपयोगकर्ता के लिए विशिष्ट है स्टोर करने के लिए इस्तेमाल किया जा सकता। सत्र को एक प्रमुख नाम से अनुक्रमित किया जाता है, और जब इसे सीधे इस तरह से उपयोग किया जाता है तो यह बड़ी संख्या में व्यक्तिगत सत्र नामों का कारण बन सकता है। एक वैकल्पिक दृष्टिकोण इसके बजाय समूह से संबंधित वस्तुओं के लिए सिंगलटन ऑब्जेक्ट बनाना और उस ऑब्जेक्ट को किसी दिए गए कुंजी नाम से स्टोर करना है। "सिंगलटन" एक आम डिजाइन पैटर्न है जो यह सुनिश्चित करता है कि किसी भी समय कक्षा का केवल एक ही उदाहरण मौजूद है।

सिंगलटन सत्र के लाभ संगठन प्रयोजनों

  • विशेष रूप से इस तरह के एक साइट पर पंजीकरण के रूप में एक क्षणिक प्रक्रिया पर पृष्ठों की एक श्रृंखला के लिए उपयोगी के लिए ऑब्जेक्ट्स सत्र मदों की

    • समूहीकरण। एक बार प्रक्रिया पूरी हो जाने वस्तु सत्र से साफ किया जा सकता स्मृति (सर्वर का बेहतर इस्तेमाल संसाधन)
    • प्रभाव सत्र जानकारी में परिवर्तन के विश्लेषण के पुन: दावा किया जा सकता है इतना आसान
    • साइट हैं कि के क्षेत्रों की पहचान है जानकारी का दुरुपयोग प्रॉपर्टी नामों के लिए
    • Intellisense और प्रकार एक बार वस्तु का उपयोग (अधिक स्पष्ट सिर्फ अगर यह उपयोग करने के लिए उचित है निर्धारित करने के लिए चर के नाम का उपयोग की तुलना में)

    सिंगलटन सत्र का नुकसान ऑब्जेक्ट्स

    अधिक सत्र में अलग-अलग आइटम की संख्या को देखने के लिए जब प्रक्रिया सत्र स्थिति भंडारण से बाहर का उपयोग कर ASP.Net ट्रेस परिणाम वस्तु प्रदर्शन गिरावट के अंदर मान प्रदर्शित नहीं करता है मुश्किल (प्रभावित करता क्रमबद्धता)

    कार्यान्वयन

    पहला कार्यान्वयन चरण एक वर्ग फ़ाइल बनाना है जो वस्तुओं के लॉजिकल ग्रुपिंग का प्रतिनिधित्व करता है जिसे एकल ऑब्जेक्ट में एक साथ संग्रहीत किया जाना चाहिए। निम्नलिखित एक नमूना वर्ग है कि तकनीक को दर्शाता है है:

    public class singleton 
    { 
        //Name that will be used as key for Session object 
        private const string SESSION_SINGLETON = "SINGLETON"; 
    
        //Variables to store the data (used to be individual 
        // session key/value pairs) 
        string lastName = ""; 
        string firstName = ""; 
    
        public string LastName 
        { 
        get 
        { 
         return lastName; 
        } 
        set 
        { 
         lastName = value; 
        } 
        } 
    
        public string FirstName 
        { 
        get 
        { 
         return firstName; 
        } 
        set 
        { 
         firstName = value; 
        } 
        } 
    
        //Private constructor so cannot create an instance 
        // without using the correct method. This is 
        // this is critical to properly implementing 
        // as a singleton object, objects of this 
        // class cannot be created from outside this 
        // class 
        private singleton() 
        { 
        } 
    
        // Create as a static method so this can be called using 
        // just the class name (no object instance is required). 
        // It simplifies other code because it will always return 
        // the single instance of this class, either newly created 
        // or from the session 
        public static singleton GetCurrentSingleton() 
        { 
        singleton oSingleton; 
    
        if (null == System.Web.HttpContext.Current.Session[SESSION_SINGLETON]) 
        { 
         //No current session object exists, use private constructor to 
         // create an instance, place it into the session 
         oSingleton = new singleton(); 
         System.Web.HttpContext.Current.Session[SESSION_SINGLETON] = oSingleton; 
        } 
        else 
        { 
         //Retrieve the already instance that was already created 
         oSingleton = (singleton)System.Web.HttpContext.Current.Session[SESSION_SINGLETON]; 
        } 
    
        //Return the single instance of this class that was stored in the session 
        return oSingleton; 
        } 
    } 
    

    इस वस्तु का उपयोग करने के लिए बस है निम्नलिखित चाहता है कि एक पृष्ठ:

    singleton oSingleton = singleton.GetCurrentSingleton(); 
    oSingleton.FirstName = "Robert"; 
    oSingleton.LastName = "Boedigheimer"; 
    

    आमतौर पर इस तकनीक का बहुत अधिक चर किसी वर्ग में स्टोर करेगा या एक वेब पेजों की एक श्रृंखला के लिए इस्तेमाल किया जाएगा जो एक प्रक्रिया करता है। किसी वेब साइट पर प्रक्रिया के लिए इसका उपयोग करने का एक अन्य लाभ यह है कि सत्र चर के लिए आवश्यक सभी मेमोरी को सिंगलटन ऑब्जेक्ट के संदर्भ को हटाकर साफ़ किया जा सकता है। वर्ग एक विधि है कि ग्राहकों के संदर्भ में, यह निपटान नामित किया जा सकता है स्पष्ट करने के लिए उपयोग कर सकते हैं लागू कर सकते हैं() ठेठ नेट पैटर्न का पालन करने के लिए जब एक वर्ग के सफाई के लिए एक रास्ता प्रदान करता है:

    public static void Dispose() 
    { 
        //Cleanup this object so that GC can reclaim space 
        System.Web.HttpContext.Current.Session.Remove(SESSION_SINGLETON); 
    } 
    

    निष्कर्ष

    सूचना संग्रहित करने के लिए अलग-अलग सत्र कुंजी का उपयोग करने के बजाय सत्र ऑब्जेक्ट में संग्रहीत सिंगलटन ऑब्जेक्ट्स का उपयोग करने के कई फायदे हैं। यह उन ऑब्जेक्ट्स के लिए उपयोगी है जो पूरे सत्र (समूह लॉजिकल आइटम, इफेक्ट विश्लेषण, इंटेलिजेंस इत्यादि) के लिए मौजूद हैं और खासकर उन ऑब्जेक्ट्स के लिए जो वास्तव में केवल एक वेब साइट पर केवल समय की आवश्यकता होती है जब तक उपयोगकर्ता कोई विशेष कार्य नहीं करता प्रक्रिया (चर के दुरुपयोग की पहचान करने और प्रक्रिया पूरी होने पर संसाधनों को संरक्षित करने के लिए बहुत आसान है लेकिन सत्र जारी रहेगा)।

  • संबंधित मुद्दे