2011-06-14 24 views
24

मैं एक ऐप बना रहा हूं जो डेटा संग्रह करने के लिए SQL डेटाबेस का उपयोग करता है। जिस तरह से ऐप डिज़ाइन किया गया है, उसे ऐप चलने के दौरान उपयोगकर्ता क्रियाओं के आधार पर नए डेटा के साथ हर 3 मिनट या उससे भी अधिक अपडेट किया जाएगा।क्या मुझे अपना SQL डेटाबेस लगातार खोलना चाहिए() और बंद करना चाहिए या इसे खोलना चाहिए?

मैंने देखा है कि ट्यूटोरियल में, वे अनुशंसा करते हैं कि आप इसे बदलने के बाद डेटाबेस बंद करें (यह संसाधनों के संदर्भ में एक "महंगा" है)।

क्या यह मेरे ऐप की अवधि के लिए इसे खोलना बेहतर है क्योंकि इसे काफी बार आधार पर अपडेट किया जा रहा है या क्या मुझे हर बदलाव के तुरंत बाद बंद() विधि चलनी चाहिए?

मुझे लगता है कि मेरी चिंता यह है कि इसे खोलना और इसे बंद करना अधिक संसाधनों को आकर्षित करेगा, इससे पूरे समय इसे खोलना होगा।

उत्तर

5

मैं एक बार एक कनेक्शन खुला छोड़ करने की कोशिश की निम्नलिखित एक नज़र अभी व।

बाद में कार्यक्रम में, मुझे कनेक्शन का उपयोग करने की एक और आवश्यकता थी - मुझे लगता है कि मेरे पास ऐसा था कि जब उपयोगकर्ता ने दोहराने वाले में मूल आइटम पर क्लिक किया, तो उस आइटम के लिए अधिक जानकारी के साथ एक विस्तार div पॉप-अप होगा । इससे एक त्रुटि उत्पन्न हुई - 'खुले कनेक्शन पर' खोल नहीं सकते() के प्रभाव के लिए कुछ।

मुझे लगता है कि त्रुटि किसी अन्य तरीके से टालने योग्य हो सकती है (जैसे यह देखने के लिए कि क्या कनेक्शन खोलने की कोशिश कर रहा था, पहले से ही खुला था), लेकिन जैसा कि मैंने इसके बारे में सोचा था, मुझे एहसास हुआ कि मुझे इसे मानक बनाना होगा मेरे पूरे ऐप में अभ्यास करें, और यह बहुत अधिक काम की तरह लग रहा था, इसलिए मैंने इसे प्रत्येक प्रयोग के बाद हमेशा अपने कनेक्शन बंद करने के लिए एक मानक अभ्यास किया।

कनेक्शन कनेक्शन पूल में रहते हैं - मैं उस पर कोई बात नहीं कर रहा हूं - लेकिन अगर प्रदर्शन के बारे में उत्सुक था, तो मुझे लगता है कि मैं इसे ध्यान में रखूंगा, इस बात के संदर्भ में कि कितनी बार कनेक्शन खोलना है - जो कुछ भी आपकी स्थिति की आवश्यकता है वैसे भी।

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

+0

डीबीए? क्या हम अभी भी एंड्रॉइड के बारे में बात कर रहे हैं? – LarsH

+0

डाटाबेस प्रशासक – papiro

3

आज के प्रोसेसर, यहां तक ​​कि फोन प्रोसेसर पर तीन मिनट अनंत काल है। मैं इसे बंद कर दूंगा और इसे हर बार खोलूंगा। यह संभवतः 'ईथर' में लटकने वाले हैंडल छोड़ने से बेहतर है।

+0

तीन मिनट के लिए अपवोट आजकल प्रोसेसर पर अनंत काल है –

1

यदि आप मुझे एंड्रॉइड के बारे में अब तक जो कुछ भी पढ़ चुके हैं, उससे पूछते हैं और आम तौर पर संशोधन करने के बाद इसे बंद करना बेहतर होता है।

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

+0

क्या यह डीबी हेल्पर या डीबीएडाप्टर बनाकर किया जाता है? – easycheese

+0

नोटपैड ट्यूटोरियल पर एक नज़र डालें और फिर उदाहरणों में नोटपैड प्रोजेक्ट पर इसका पालन करें। http://developer.android.com/resources/tutorials/notepad/index.html – DArkO

+0

यह स्क्लाइट सहायक कार्यान्वयन से थोड़ा अलग है (एक एडाप्टर या केवल एक साधारण डेटाबेस जिसे आप सीधे तरीकों से एक्सेस करेंगे)। मेरा मानना ​​है कि एक सामग्री प्रदाता वास्तव में वास्तव में अच्छा समाधान है। इन मुद्दों को हल करने के लिए विभिन्न डिज़ाइन पैटर्न का उपयोग करने के लिए डेटाबेस के साथ कई परियोजनाएं करने और समरूपता के साथ समस्याएं, डेटाबेस बंद करने या बंद डेटाबेस आदि में चलने आदि के बाद, मुझे अभी भी पता चला है कि एक सामग्री प्रदाता सबसे अच्छा समाधान है और यह पूरी तरह से काम करता है मेरे द्वारा किए गए सभी ऐप्स के लिए अब तक। इसके बावजूद थोड़ा बड़ा ओवरहेड है। – DArkO

3

मान लें कि आपके पास एक ही थ्रेड में वापस करने के लिए कई डीबी ऑपरेशन हैं। मैं डीबी को उन कार्यों को करने के लिए खुला रखूंगा। हालांकि काम का एक हिस्सा करने के बाद डीबी बंद करें।

3

मुझे लगता है कि इस प्रश्न का उत्तर भी इस बात पर निर्भर करता है कि किस प्रकार का एप्लिकेशन डेटाबेस तक पहुंच रहा है।

यदि आप डेटाबेस को पुनः क्वेरी करते हैं तो इस मामले में आप डेटाबेस को खोल सकते हैं।

क्या कोई अन्य एप्लिकेशन उसी डेटाबेस तक पहुंच रहा है? यदि समवर्ती या अवरुद्ध मुद्दों के लिए कोई जोखिम है, तो इसे पढ़ने/लिखने के बाद डेटाबेस को बंद करना बुद्धिमान हो सकता है। मैं इसे इस्तेमाल किया एक पुनरावर्तक या कुछ और सामान के लिए - - याद नहीं कर सकते

onthe यूआरएल

When to close db connection on android? Every time after your operation finished or after your app exit

धन्यवाद दीपक

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

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