कल्पना कीजिए नहीं; आप बहुत स्थिर सदस्य बना सकते हैं। लेकिन, उन्हें readonly
के रूप में चिह्नित करने की आवश्यकता है, जिनके पास SAFE
या EXTERNAL_ACCESS
हैं। केवल UNSAFE
के रूप में चिह्नित एक असेंबली लिखने योग्य स्थिर सदस्य हो सकती है। और यह प्रतिबंध स्थैतिक सदस्यों की प्रकृति के कारण है: धागे और सत्रों के बीच साझा किए गए हैं।
पहली बार एक असेंबली लोड हो जाती है जिसमें एक विधि का उपयोग किया जाता है। यह सभी सत्रों के उपयोग के लिए साझा किया जाता है, यही कारण है कि केवल स्थिर विधियां उपलब्ध हैं। विचार है कि कार्यों को लिखना, आवेदन नहीं, इसलिए राज्य को बनाए रखने में बहुत अधिक उपयोग नहीं है। और यह आसानी से (हालांकि निश्चित रूप से हमेशा नहीं) अप्रत्याशित व्यवहार का कारण बन सकता है यदि विभिन्न सत्र एक दूसरे को ओवरराइट कर रहे हैं। इसलिए जब तक आप उस हिस्से को स्वयं नहीं लिखते, तब तक समेकन को संभाला नहीं जाता है।
यह अपेक्षा की जानी चाहिए कि एक बार लोड होने पर, कक्षा (और ऐप डोमेन जो इसमें रहता है) स्मृति में तब तक रहेगा जब तक कि SQL सर्वर सेवा पुनरारंभ नहीं हो जाती है या PERMISSION_SET
मान बदल जाता है। लेकिन इसकी गारंटी नहीं है। यह पेज, Memory Usage in SQL CLR के अनुसार:
जब वहाँ सर्वर पर स्मृति दबाव है, SQL CLR स्पष्ट रूप से चल रहा है कचरा संग्रहण द्वारा स्मृति जारी करने और यदि आवश्यक हो, appdomains उतारने की कोशिश करेंगे।
- वे अप्रत्याशित पैदा कर सकता है:
- वे कैशिंग (बहुत शांत)
- वे और अधिक खतरनाक हो सकता है के लिए इस्तेमाल किया जा सकता है:
तो तुम स्थिर सदस्यों के बारे में दोनों मामलों में सही हैं व्यवहार
वे स्मृति को जोड़ सकते हैं क्योंकि उन्हें निहित करने के लिए कोई अंतर्निहित तंत्र या प्राकृतिक घटना नहीं है क्योंकि कक्षा सक्रिय रहती है।
और, CLR दिनचर्या के लिए उपलब्ध स्मृति की मात्रा बहुत है कि क्या एसक्यूएल सर्वर 32 या 64 बिट है पर निर्भर करता है, और क्या आप एसक्यूएल सर्वर का उपयोग कर रहे 2005/2008/2008 R2 या SQL Server 2012 का उपयोग कर/2014. SQLCLR को कितनी मेमोरी के साथ खेलना है, इस बारे में अधिक जानकारी के लिए, SQL Server 2012 Memory और Memory Usage in SQL CLR देखें (उद्धरण के ऊपर पोस्ट किए गए पहले लिंक के समान)।
स्रोत
2014-12-05 06:26:32
मुझे आशा नहीं होगी, लेकिन विशेष रूप से SQL सर्वर (जो कि एक विशिष्ट .NET रनटाइम से अधिक बाध्य है) के लिए एक निश्चित "हां" या "नहीं" देखना चाहेंगे –
@ क्रेगवाल्कर और तामास: " हां, ये स्थैतिक वस्तुएं तब तक रहती हैं जब तक डेटाबेस बंद नहीं होता है या फिर से शुरू नहीं होता है ", यह सच नहीं है।विभिन्न कारणों से ऐपडोमेन को अनलोड किया जा सकता है, जिनमें शामिल हैं: ** 1) ** स्वचालित रूप से मेमोरी प्रेशर के कारण, ** 2) ** जब असेंबली या डेटाबेस में सुरक्षा सेटअप बदलता है, ** 3) ** अगर कोई ' डीबीसीसी ड्रॉप्स्टेस्टबफर्स ('ऑल') ', और ** 4) ** शायद 1 या 2 अन्य तरीकों से। –