इस कार्यक्षमता के लिए प्राथमिक ड्राइवर SQL सर्वर 2005 में सीएलआर को एकीकृत करने के लिए SQL सर्वर कड़े आवश्यकताओं का समर्थन करना था। शायद अन्य लोग कानूनी कारणों से उपयोग कर सकते हैं और संभवतः कानूनी कारणों से यह गहरा एकीकरण होस्टिंग एपीआई के रूप में प्रकाशित किया गया था लेकिन तकनीकी आवश्यकताओं एसक्यूएल सर्वर थे। याद रखें कि SQL सर्वर में, एमटीबीएफ को महीनों में मापा जाता है और प्रक्रिया पुनरारंभ नहीं होती है क्योंकि एक अनचाहे अपवाद पूरी तरह से अस्वीकार्य है।
यह MSDN Magazine article शायद सबसे अच्छा है जिसे मैंने तकनीकी आवश्यकताओं का वर्णन करने के लिए देखा है, जिसके लिए बाध्य निष्पादन वातावरण बनाया गया था।
विश्वसनीयता नियंत्रण आपके तरीकों को सजाने के लिए उपयोग किया जाता है यह इंगित करने के लिए कि वे संभावित रूप से एसिंक्रोनस अपवाद (थ्रेडएबॉर्ट एक्सेप्शन, आउटऑफमेमरी एक्सेप्शन, स्टैक ओवरव्लो एक्सेप्शन) के मामले में कैसे काम करते हैं। एक बाधित निष्पादन क्षेत्र को एक कोशिश ब्लॉक के कैच या अंत में (या गलती) अनुभाग के रूप में परिभाषित किया जाता है जो तुरंत सिस्टम के कॉल से पहले होता है। रनटाइम। कॉम्पलर सर्विसेज। रनटाइम सर्विसेज। पेपरारे कॉन्स्ट्रेनड रेगियंस()।
System.Runtime.CompilerServices.RuntimeServices.PrepareConstrainedRegions();
try
{
// this is not constrained
}
catch (Exception e)
{
// this IS a CER
}
finally
{
// this IS ALSO a CER
}
जब एक सीईआर के भीतर से एक विश्वसनीयता नियंत्रण विधि का उपयोग किया जाता है, तो इसमें 2 चीजें होती हैं। यह विधि जेआईटी द्वारा पूर्व-तैयार की जाएगी ताकि वह पहली बार जेआईटी कंपाइलर को निष्पादित न करे, जो इसे पहली बार मेमोरी का उपयोग करने और अपने स्वयं के अपवादों का कारण बनने का प्रयास कर सकता है। सीईआर के अंदर भी रनटाइम एक थ्रेडएबॉर्ट अपवाद फेंकने का वादा करता है और सीईआर पूरा होने तक अपवाद फेंकने का इंतजार करेगा।
तो अपने प्रश्न पर वापस जाएं; मैं अभी भी एक साधारण कोड नमूना के साथ आने की कोशिश कर रहा हूं जो सीधे आपके प्रश्न का उत्तर देगा। जैसा कि आप पहले ही अनुमान लगा सकते हैं, सबसे सरल नमूना को समस्या की असीमित प्रकृति को देखते हुए बहुत सारे कोड की आवश्यकता होगी और संभवतः एसक्यूएलसीएलआर कोड होगा क्योंकि यह पर्यावरण है जो सबसे अधिक लाभ के लिए सीईआर का उपयोग करेगा।
स्रोत
2009-08-28 17:04:59
ध्यान दें कि यह कोड StackOverflow अपवाद पर गहराई से विफल रहता है, लेकिन यह वास्तव में नहीं है। यदि आप बिग-लाइनों को हटाकर स्टैक को दूषित करते हैं, और स्टैक ओवरव्लो को दोबारा कॉल करते हैं, तो ओओएम ट्रिगर नहीं होता है और एसओ अपवाद नहीं पकड़ा जाता है। यह 'PrepareConstrainedRegions' (afaik) की एक सीमा है। यह भी देखें रिक्टर की CLR पुस्तक: http://books.google.nl/books?id=QMdCf_mm55cC&pg=PT1016&lpg=PT1016&dq=ExecuteCodeWithGuaranteedCleanup+stackoverflowexception&source=bl&ots=V942WGDtFy&sig=I8shxrKexuEKnJPvQf7Cqzck6SE&hl=en&sa=X&ei=NYnpUI-BI8-S0QX6q4GgAw&redir_esc=y – Abel