याद रखें यह सब .Net पारिस्थितिकी तंत्र के संदर्भ में है।
डेवलपर्स कभी-कभी अपनी कनेक्शन वस्तुओं का फिर से उपयोग करने के लिए अपने कोड को "अनुकूलित" करना चाहते हैं। इस प्रश्न के संदर्भ को देखते हुए, यह लगभग हमेशा एक गलती है।
ADO.Net में एक सुविधा है जिसे कनेक्शन पूलिंग कहा जाता है । जब आप एक नया कनेक्शन ऑब्जेक्ट बनाते हैं और खोलते हैं, तो आप वास्तव में जो कर रहे हैं वह एक पूल से कनेक्शन का अनुरोध कर रहा है। जब आप एक कनेक्शन बंद करते हैं, तो आप इसे पूल में वापस कर देते हैं।
हम कोड में सीधे उपयोग की जाने वाली वस्तुओं को समझना महत्वपूर्ण है: SqlConnection, MySqlConnection, OleDbConnectio, आदि, सभी ADO.Net द्वारा प्रबंधित वास्तविक अंतर्निहित कनेक्शन के चारों ओर केवल रैपर हैं , और ADO.Net वास्तविक कनेक्शन बहुत अधिक "भारी" और अधिक महंगे हैं। एक प्रदर्शन के दृष्टिकोण से। यह इन अंतर्निहित वस्तुएं हैं, जिनमें प्रमाणीकरण, नेटवर्क पारगमन, एन्क्रिप्शन जैसी चिंताएं हैं, और वे चीजें जो आपके द्वारा अपने कोड में वास्तव में दिखाई देने वाली वस्तु में स्मृति की छोटी मात्रा से अधिक हैं।
जब आप अपने कनेक्शन ऑब्जेक्ट का पुन: उपयोग करने का प्रयास करते हैं, तो आप महत्वपूर्ण अंतर्निहित कनेक्शनों को प्रभावी ढंग से प्रबंधित करने के लिए ADO.Net की क्षमता को तोड़ते हैं। आप बहुत बड़ी चीज की कीमत पर छोटी चीज में दक्षता हासिल करते हैं।
किसी एप्लिकेशन या http अनुरोध में कनेक्शन का पुनः उपयोग करना आपको गलती से किसी ऐसी चीज़ को क्रमबद्ध करने के लिए भी बाध्य कर सकता है जो अन्यथा समानांतर में चलने में सक्षम हो सकती है, और एक प्रदर्शन अड़चन बन सकती है। मैंने वास्तविक अनुप्रयोगों में ऐसा होते देखा है।
यहां वेब पेज उदाहरण के मामले में, जहां आप कम से कम केवल एक ही http अनुरोध / प्रतिक्रिया की अवधि के लिए छोटे कनेक्शन रखते हैं, आप अपने अनुरोध पाइपलाइन में कौन से प्रश्न चलाते हैं, और मूल्यांकन करके और भी अधिक दक्षता प्राप्त कर सकते हैं। संभव के रूप में डेटाबेस के लिए कुछ अलग अनुरोध के रूप में उन्हें नीचे (संकेत: आप एक एकल SQL स्ट्रिंग में एक से अधिक क्वेरी सबमिट कर सकते हैं, और उनके बीच स्थानांतरित करने के लिए DataReader.NextResult()
अलग-अलग तालिकाओं का उपयोग या जांच कर सकते DataSet
हैं)।
दूसरे शब्दों में, किसी एप्लिकेशन के लिए एक कनेक्शन को फिर से उपयोग करने या प्रति क्वेरी एक http बनाम बनाम एक कनेक्शन का उपयोग करने के संदर्भ में सोचने के बजाय, हर बार जब आप डेटाबेस के लिए कॉल करते हैं तो एक कनेक्शन के संदर्भ में सोचें ... प्रत्येक दौर की यात्रा। फिर उन यात्राओं की संख्या को कम करके कनेक्शन की संख्या को कम करने का प्रयास करें। इस तरह आप दोनों लक्ष्यों को पूरा कर सकते हैं।
लेकिन यह सिर्फ एक तरह का अनुकूलन है। प्रोग्रामर समय का अनुकूलन भी है, और प्रभावी कोड का फिर से उपयोग करना है। डेवलपर्स एक बॉयलरप्लेट कोड को बार-बार लिखना नहीं चाहते हैं, बस एक कनेक्शन ऑब्जेक्ट प्राप्त करने के लिए जो खुला और रेडी-टू-यूज़ है। यह केवल थकाऊ नहीं है, यह एक कार्यक्रम में बगों को पेश करने का एक तरीका है।
यहां तक कि, हालांकि, आमतौर पर प्रति कनेक्शन (या गोल यात्रा) एक कनेक्शन होना बेहतर है। ऐसे अन्य पैटर्न हैं जिनका उपयोग करके आप उसी बॉयलरप्लेट कोड को फिर से लिखने से बचने में मदद कर सकते हैं। यहाँ एक उदाहरण मुझे पसंद है, लेकिन कई अन्य हैं।