दिलचस्प पोस्ट
UIWebView के भीतर HTML और स्थानीय चित्रों का उपयोग करना जावास्क्रिप्ट स्तरीयजर के दौरान ASP.NET MVC में MaxJsonLength अपवाद क्या भाषण इनपुट के लिए सीधे भाषणकर्ता API का उपयोग करने का कोई तरीका है? क्या अधिकतम समय तक कुछ करने की कोशिश करने के लिए एक अजगर तरीका है? मिक्सिन्स (एक अवधारणा के रूप में) क्या हैं पहली एन सकारात्मक पूर्णांक प्राप्त करने के लिए एसक्यूएल का चयन करें कैसे एचएएलएल के साथ मानचित्र <कुंजी, वैल्यू> वापस आ जाना है संख्याओं के एक सेट को नोडी में बदल दें ताकि प्रत्येक संख्या कई अन्य नंबरों में परिवर्तित हो जाए जो इससे कम है दस्तावेज निर्देशिका (एनएसडी दस्तावेज़ डायरेक्टरी) क्या है? एचटीएमएल / जावास्क्रिप्ट: सबमिट करने पर सरल फार्म सत्यापन मैं इस संदर्भ को एक ईवेंट हैंडलर में कैसे पास कर सकता हूं? कैसे एक कॉलम हैडर पाठ को jqgrid में एकाधिक पंक्तियों में लपेटें कोणीय जेएस: कोणीय ऐप में डिस्प्ले ब्लॉब (.पीडीएफ) मॉकिटो के साथ स्थिर तरीके से मस्त किसी अन्य वेबपेज पर कैसे पुनर्निर्देशित किया जा सकता है?

एएसपी.नेट में ऐप्लीकेशन स्थिति के बजाय स्थिर वैरिएब का उपयोग करना

मैं एएसपी.नेट में अनुप्रयोग स्थिति के बजाय स्थैतिक चर का उपयोग करने के लिए विमान और सोच रहा हूं कि यह सही दृष्टिकोण है:

[Global.asax.cs] ... public class Global : System.Web.HttpApplication { void Application_Start(object sender, EventArgs e) { // Code that runs on application startup } ... private static Dictionary<string, object> cacheItems = new Dictionary<string, object>(); private static object locker = new object(); public static Dictionary<string, object> CacheItems { get { lock (locker) { return cacheItems; } } set { lock (locker) { cacheItems = value; } } } public static void RemoveCacheItem(string key) { cacheItems.Remove(key); } ... } 

जैसा कि आप देख सकते हैं कि मैं स्वचालित रूप से निर्मित Global.asax (और पीछे कोड) फ़ाइल का उपयोग करता हूं। मैंने कुछ स्थिर चर और विधियों को जोड़ दिया है मैं उन्हें इस तरीके से उपयोग कर सकता हूं:

 [some .cs file] foreach(KeyValuePair<string, object> dictItem in Global.CacheItems) { ... 

क्या यह सही तरीके है या मुझे मौजूदा ग्लोबल के बजाय नया वर्ग बनाना चाहिए? अगर मुझे नया वर्ग बनाना चाहिए तो मैं यह कैसे और कहाँ कर सकता हूं?

Solutions Collecting From Web of "एएसपी.नेट में ऐप्लीकेशन स्थिति के बजाय स्थिर वैरिएब का उपयोग करना"

माइक्रोसॉफ्ट क्या कहते हैं

एएसपी.नेट में मुख्य रूप से क्लासिक एएसपी के साथ संगतता के लिए आवेदन स्थिति शामिल है, ताकि मौजूदा अनुप्रयोगों को एएसपी.नेट में स्थानांतरित करना आसान हो। यह अनुशंसा की जाती है कि आप एप्लिकेशन ऑब्जेक्ट के बजाय एप्लिकेशन क्लास के स्थिर सदस्यों में डेटा संग्रहीत करें। यह कार्यक्षमता बढ़ाता है क्योंकि आप एक स्थिर वैरिएबल तक पहुँच सकते हैं, जितना कि आप एप्लिकेशन शब्दकोश में कोई आइटम एक्सेस कर सकते हैं।

संदर्भ: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q312607

मेरा expirience

स्थिर वैरिएबल और एप्लिकेशन स्थिति के बीच मुख्य अंतर यह है कि अनुप्रयोग स्थिति सभी थ्रेड्स और पूल में एक समान है, लेकिन स्थिर प्रति पूल केवल एक ही है।

नए परीक्षणों के बाद मैं देखता हूं कि अनुप्रयोग राज्य चर स्थिर वैरिएबल के समान हैं, और वे आवेदन पर स्थिर वैरिएबल के संदर्भ में हैं, और ये सिर्फ संगतता के कारण मौजूद हैं क्योंकि माइक्रोसॉफ्ट का कहना है

यदि आपके पास अपनी साइट (वेब ​​गार्डन) चलने वाले 4 पूल हैं, तो आपके पास 4 अलग-अलग स्थैतिक स्मृति सेट हैं

तुम्हारा कोड

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

  // this is not enough to manipulate your data ! public static Dictionary<string, object> CacheItems { get{ lock (locker){return cacheItems; } } set{ lock (locker){cacheItems = value;} } } 

सही तरीका यह है कि जब तक आप काम नहीं करते हैं, तब तक जोड़ने / हटाने के सभी कार्यों को लॉक करना है, उदाहरण के लिए।

 private static Dictionary<string, object> cacheItems = new Dictionary<string, object>(); private static object locker = new object(); public Dictionary<string, object> CacheItems { get{ return cacheItems; } set{ cacheItems = value;} } SomeFunction() { ... lock(locker) { CacheItems["VariableName"] = SomeObject; } ... } 

दूसरी तरफ जब आप आवेदन स्थिति पर डेटा में हेरफेर करते हैं तो आपको इसके वैश्विक लॉक का उपयोग करना होगा Application.Lock(); और Application.UnLock(); उदाहरण के लिए

 Application.Lock(); Application["PageRequestCount"] = ((int)Application["PageRequestCount"])+1; Application.UnLock(); 

परिणाम के साथ बंद करने के लिए:

एप्लिकेशन स्थिति से बचें और बस अपने कोड पर स्थिर चर का उपयोग करें।