सिद्धांत रूप में, एक कोशिश / कैच ब्लॉक का कोड व्यवहार पर कोई प्रभाव नहीं पड़ेगा जब तक कि कोई अपवाद वास्तव में न हो। हालांकि, कुछ दुर्लभ परिस्थितियां हैं, जहां एक कोशिश / कैच ब्लॉक का अस्तित्व एक बड़ा प्रभाव हो सकता है, और कुछ असामान्य-लेकिन-शायद ही-अस्पष्ट हैं जहां प्रभाव ध्यान देने योग्य हो सकता है। इसका कारण यह है कि दिए गए कोड जैसे:
Action q;
double thing1()
{ double total; for (int i=0; i<1000000; i++) total+=1.0/i; return total;}
double thing2()
{ q=null; return 1.0;}
...
x=thing1(); // statement1
x=thing2(x); // statement2
doSomething(x); // statement3
कंपाइलर कथन 1 को इस तथ्य के आधार पर अनुकूलित करने में सक्षम हो सकता है कि कथन 2 को कथन 3 से पहले निष्पादित करने की गारंटी है। यदि कंपाइलर यह पहचान सकता है कि thing1 का कोई साइड-इफेक्ट नहीं है और thing2 वास्तव में x का उपयोग नहीं करता है, तो यह thing1 को पूरी तरह से छोड़ सकता है। यदि [जैसा कि इस मामले में] thing1 महंगा था, कि एक प्रमुख अनुकूलन हो सकता है, हालांकि मामले 1 जहां महंगा है, वे भी हैं जो संकलक कम से कम ऑप्टिमाइज़ होने की संभावना है। मान लीजिए कि कोड बदल दिए गए हैं:
x=thing1(); // statement1
try
{ x=thing2(x); } // statement2
catch { q(); }
doSomething(x); // statement3
अब उन घटनाओं का एक क्रम मौजूद है जहाँ कथन 3 बिना कथन 2 को निष्पादित कर सकता है। यहां तक कि अगर कोड में कुछ भी thing2
एक अपवाद को नहीं फेंक सकता है, तो यह संभव होगा कि एक और थ्रेड एक Interlocked.CompareExchange
नोटिस का उपयोग कर सकता है जो q
इसे मंजूरी दे दी गई थी Thread.ResetAbort
और फिर इसे सेट करने के लिए Thread.Abort()
पहले एक स्टेटमेंट 2 लिखा था x
। तब [प्रतिनिधि के माध्यम से ] catch
निष्पादित करेगा , निष्पादन को कथन 3 के साथ जारी रखने की अनुमति देगा। ऐसी घटनाओं का क्रम निश्चित रूप से असाधारण रूप से असंभव होगा, लेकिन कोड जनरेट करने के लिए एक कंपाइलर की आवश्यकता होती है जो इस तरह की अनुचित घटनाओं के होने पर भी विनिर्देश के अनुसार काम करता है।Thread.ResetAbort()
q
सामान्य तौर पर, कंपाइलर कॉम्प्लेक्स बिट्स की तुलना में कोड के सरल बिट्स को छोड़ने के अवसरों को नोटिस करने की बहुत अधिक संभावना है, और इस तरह यह एक दुर्लभ / कोशिश के लिए दुर्लभ होगा यदि अपवाद कभी भी फेंके नहीं जाते हैं तो प्रदर्शन को प्रभावित कर सकता है। फिर भी, कुछ परिस्थितियाँ ऐसी होती हैं जहाँ एक कोशिश / कैच ब्लॉक का अस्तित्व अनुकूलन को रोक सकता है - लेकिन कोशिश / पकड़ने के लिए - कोड को तेज़ी से चलाने की अनुमति देता है।