पूरे कार्यक्रम में, जिस पर मैं वर्तमान में काम कर रहा हूं, मुझे एहसास हुआ कि जब भी मुझे SQL सर्वर तक पहुंचने की आवश्यकता होती है, तो मैं केवल एक क्वेरीस्ट्रिंग टाइप करता हूं और सी # में एसक्लकॉमैंड और एसक्लकनेक्शन का उपयोग करके अपनी क्वेरी निष्पादित करता हूं। कार्यक्रम के दौरान एक निश्चित बिंदु पर, मैंने एक कनेक्शन भी खोला और "लूप के लिए" में एक क्वेरी चलाई।

क्या कार्यक्रम के लिए लगातार खुले-बंद कनेक्शन के लिए यह अस्वस्थ है?

***मैं शब्दावली से बहुत परिचित नहीं हूँ, इसलिए आपको यह समझने में कुछ समस्याएँ हो सकती हैं कि मैं किस बारे में बात कर रहा हूँ:

क्या ऐसा बहुत बार करने से कोई समस्या हो सकती है ?:

string queryString = "Some SQL Query";
public void(){
   SqlConnection con = new Connection(conString);
   SqlCommand cmd = new SqlCommand(queryString,con);
   cmd.Parameters.AddWithValue("@SomeParam",someValue);
   con.Open();
   cmd.ExecuteNonQuery();
   con.Close();

}

मैं इस टेम्पलेट का उपयोग लगभग हर वर्ग को बनाता हूं, (आमतौर पर डेटा प्राप्त करने, अपडेट करने, डेटाटेबल में/डेटा डालने के लिए)। अच्छा, क्या यह हानिकारक है?

0
HydraCc 14 पद 2020, 20:00
3
कनेक्शन खोलना और उसे जल्द से जल्द बंद करना अच्छा अभ्यास है। कनेक्शन का एक पूल है जो पृष्ठभूमि में उपयोग किया जाता है (जब तक कि आपने उन्हें बंद नहीं किया हो)
 – 
DavidG
14 पद 2020, 20:01
2
वास्तव में इसके विपरीत है जो अस्वस्थ है: यथासंभव लंबे समय तक एक ही कनेक्शन पर लटकने का प्रयास (या इसे वैश्विक स्थान और साझा करने में भी संग्रहीत करना) कोड की ओर जाता है जो डीबग और बनाए रखने के लिए और अधिक कठिन होता है। एक SqlConnection भौतिक कनेक्शन के लिए सिर्फ एक हैंडल है, इसे खोलना सस्ता है। हालाँकि, आपको स्पष्ट Close के बजाय चीजों को साफ करने के लिए using कथन का उपयोग करने की आदत डालनी चाहिए। साथ ही, खाई AddWithValue और साधारण चीजों के लिए डैपर से प्यार करना सीखें।
 – 
Jeroen Mostert
14 पद 2020, 20:03

1 उत्तर

सबसे बढ़िया उत्तर

संक्षिप्त उत्तर हां है - यह लगातार कनेक्शन खोलने और बंद करने में अक्षम है। एक वास्तविक कनेक्शन खोलना एक बहुत ही महंगी प्रक्रिया है और इसकी आवश्यकता के जीवनकाल के लिए कनेक्शन का प्रबंधन करना (जो आमतौर पर आवेदन या प्रक्रिया का उपयोग करने का जीवनकाल होता है) त्रुटियों से भरा होता है।

यही कारण है कि कनेक्शन पूलिंग को बहुत पहले पेश किया गया था। आपके एप्लिकेशन के नीचे एक परत है जो कनेक्शन के भौतिक उद्घाटन/समापन को अधिक कुशल तरीके से प्रबंधित करेगी। यह इस संभावना को रोकने में भी मदद करता है कि एक खुला कनेक्शन खो गया है और खुला रहता है (जिसके कारण बहुत सारी समस्याएं होती हैं)। डिफ़ॉल्ट रूप से पूलिंग सक्षम है इसलिए आपको इसका उपयोग करने के लिए कुछ भी करने की आवश्यकता नहीं है।

पूलिंग के साथ - आप एक कनेक्शन खोलने के लिए कोड लिखते हैं और कोड के एक विशेष खंड की अवधि के लिए इसका इस्तेमाल करते हैं और फिर इसे बंद कर देते हैं। यदि कनेक्शन पूल में एक खुला लेकिन अप्रयुक्त कनेक्शन है, तो यह एक नया खोलने के बजाय इसका पुन: उपयोग करेगा। जब आप कनेक्शन बंद करते हैं, तो वह कनेक्शन को पूल में वापस कर देता है और इसे अगले खुले प्रयास के लिए उपलब्ध कराता है। आपको c# कथन का उपयोग करके परिचित होना चाहिए .

3
SMor 14 पद 2020, 20:17
तो अब, कनेक्शन पूलिंग के साथ, पहले की तरह लगातार कनेक्शन खोलना और बंद करना उतना अक्षम नहीं है? और हाँ मैं कथन का उपयोग करता हूं, मेरे प्रश्न में उदाहरण सिर्फ प्रदर्शन के लिए था।
 – 
HydraCc
14 पद 2020, 20:24