मैं अपने ऐप के जीवन चक्र में प्रश्नों की एक श्रृंखला चलाता हूं।आईओएस जीवन चक्र में एक एसक्यूलाइट डीबी खोलने और बंद करने के लिए कब?
मैं वर्तमान में FMDB (स्क्लाइट सी एपीआई के आसपास एक उद्देश्य-सी रैपर) का उपयोग कर रहा हूं, और मैं प्रत्येक क्वेरी से पहले खोल रहा हूं और बंद कर रहा हूं।
FMDatabase * db = [FMDatabase databaseWithPath:pathToMyDB];
[db open]
FMResultSet * s = [db executeQuery:@"SELECT * FROM myTable"];
// Use FMResultSet
[db close];
खोलें और बंद करें ट्रिगर fopen()
और fclose()
नीचे कम है, इसलिए मैं belive मैं डेटाबेस खुला रखने के द्वारा एक जबरदस्ती जीत हासिल कर सकते हैं।
हालांकि, मुझे विश्वास है कि अस्थायी वस्तुएं बढ़ जाएंगी, जिससे स्मृति समस्याएं पैदा हो सकती हैं। Closing the database अस्थायी वस्तुओं को साफ़ करता है।
- मुझे डेटाबेस कनेक्शन कब खोलना और बंद करना चाहिए? (उदाहरण के लिए एप्लिकेशन बैकगाउंड दर्ज किया गया था?)
- क्या मुझे कम स्मृति स्थितियों में VACUUM चलाना चाहिए?
उत्तर के लिए धन्यवाद। क्या आप 100% सुनिश्चित हैं कि डेटाबेस कोई ऑब्जेक्ट नहीं बनाता और/या रखता है? आप शायद सही हैं, लेकिन, यह प्रलेखन कहता है: "SQLITE_OK वापस करें यदि sqlite3 ऑब्जेक्ट सफलतापूर्वक नष्ट हो गया है ** और सभी संबंधित संसाधनों को हटा दिया गया है **" http://www.sqlite.org/c3ref/close.html – Robert
मुझे लगता है संबंधित संसाधन कनेक्शन को ही संदर्भित करते हैं, और कुछ अन्य चीजें जिन्हें आपको एक्सेस करने की आवश्यकता होती है। जैसा कि मैंने कहा, मुझे यकीन नहीं है, सर्वर डेटाबेस ऐसा करते हैं। फिर फिर उन्हें खोले जाने की जरूरत नहीं है, प्रति से। जैसा कि मैंने कहा, जैसा कि मैंने परीक्षण किया है: एक अलग वर्ग के खुले डेटाबेस में, हास्यास्पद प्रश्नों का पालन करें (स्मृति देखते समय) और फिर इसे बंद करें। यह स्पष्ट होना चाहिए कि क्या हो रहा है। यदि यह कुछ ऑब्जेक्ट रखता है तो आप देखेंगे कि ऐप क्रैश होने तक स्मृति बढ़ती रहती है, अगर सबकुछ एक रिश्तेदार स्थिर स्मृति आवंटन पर नहीं रहना चाहिए। यह सुनिश्चित करने का सबसे आसान तरीका है। – skytz