2012-07-12 13 views
7

निम्नलिखित दो विधियों में से कौन सा बेहतर प्रदर्शन है?कनेक्शन का निपटान करें या कनेक्शन बंद करें

using(var DB_Connection_s = new DBConnection()) 
{ 
//todo: interact with database connection 
} 

या बस:

DB_Connection_s.Close(); 
अंत में

क्या पहली विधि पूलिंग अवधारणा को बेकार बनाती है? क्योंकि अगर मैं प्रत्येक उपयोग के साथ कनेक्शन का निपटान करता हूं, तो मुझे हर बार एक नया कनेक्शन खोलना होगा (और पूल में कोई कनेक्शन नहीं होगा)।

+0

निपटान बंद हो जाएगा और साथ ही सफाई किसी अन्य संसाधनों बनाने के लिए समय ले रहा है। – Oded

+1

मुझे पता है, मैं पूछता हूं कि यह प्रदर्शन हर बार कनेक्शन को मारने के लिए है और फिर प्यूइंग का क्या फायदा है ?! –

+0

क्योंकि मुझे पता है कि जब मैं कनेक्शन बंद करता हूं। यह पूल में रहता है और अगर यह सक्रिय नहीं होता है तो इसका इस्तेमाल होता है। –

उत्तर

5

कनेक्शन पूल जब आप बंद कॉल या कनेक्शन पर निपटान में वापस जारी कर रहे हैं ...

स्रोत = SQL Server Connection Pooling (ADO.NET)

तो, द्वारा चूक जमा की वजह से प्रदर्शन नुकसान के बारे में कोई चिंता को दूर कनेक्शन।
कोड दृष्टिकोण से अंतर तो कम से कम कि using बयान हमेशा

+0

हम्म पर बंद करें, इसका मतलब यह है कि यदि मैं कनेक्शन का निपटान करता हूं, तो यह पूल में रहेगा। फिर बंद() के बीच मुख्य अंतर क्या है और निपटान() .if दोनों कनेक्शन को वापस पूल में वापस कर देते हैं। –

+0

[एमएसडीएन] पर यह आलेख (http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/f7d1fc91-2829-4835-9021-63b7353dd481) इन दो विधियों के बीच अंतर को बहस करता है। 'बाइनरीकोडर' से उत्तर पढ़ें – Steve

1

निपटान का प्रयोग करें। आंतरिक रूप से निपटान के भीतर यह कनेक्शन बंद कर देगा, इसलिए आपको चिंता करने की आवश्यकता नहीं है, इस पर संदेह में अगर परावर्तक या इसी तरह के साथ आसानी से जांच की जा सकती है।

प्रदर्शन के लिए मैं अभी भी उपयोग के साथ जाऊंगा। विंडोज़ में विभिन्न कैश सक्षम हैं (निश्चित रूप से ओडीबीसी में) यह सुनिश्चित करने के लिए कि एक ही कनेक्शन के बार-बार अनुरोधों के लिए पुन: उपयोग हो सकता है और इसलिए आपको प्रदर्शन के बारे में चिंता करने की ज़रूरत नहीं है।

+0

मुझे पता है, मैं पूछता हूं कि यह प्रदर्शन हर बार कनेक्शन को मारने के लिए है और फिर प्यूइंग का क्या फायदा है ?! –

+0

क्षमा करें - मेरा बुरा, मेरा उत्तर अपडेट करना – Ian

7

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

+0

हम्म, क्या इसका मतलब यह है कि यदि मैं कनेक्शन का निपटान करता हूं, तो यह पूल में रहेगा। –

+1

@just_name, हाँ दोनों बंद और निपटान में कोई फर्क नहीं पड़ता: एक बंद कनेक्शन पूल –

+0

से बस बंद है और पूल में डिस्पोजेड कनेक्शन भी जारी किया गया है। मैं सही हूँ? –

1

इस्तेमाल किया जाना चाहिए जब तक आप .Open (कॉल करने के लिए जा रहा होना चाहिए) फिर कुछ समय जल्द ही,

using(){} ब्लॉक का उपयोग करें।

आप
कॉल कहीं और जल्द ही एक ही कनेक्शन का उपयोग करने जा रहे हैं, .close(); तो .open() और इतने पर ...
रखने अपनी कक्षा IDisposable को लागू करने और वहाँ कनेक्शन के निपटान!

यह अभी भी कनेक्शन वस्तु

संबंधित मुद्दे