2012-04-29 10 views
9

मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जिसके लिए एक टेबल पर बिटमैप्स स्टोर करना आवश्यक है। इन बिटमैप्स का उपयोग डेटा एडाप्टर में सूचियों पर प्रदर्शित करने के लिए किया जाता है। इस तालिका में संभवतः 1000 से अधिक छवियां हो सकती हैं। कारण मैं वर्तमान में फ़ाइल में संग्रहीत नहीं कर रहा हूं क्योंकि मैं डीबी में छवियों को कितनी तेज़ी से पढ़ और लिख सकता हूं।एक SQLite कर्सर आंतरिक रूप से कैसे काम करता है?

जो मैं अनिवार्य रूप से ढूंढ रहा हूं वह SQLite के कर्सर की सीमाओं को समझना है। कर्सर स्मृति में कैसे लोड किया जाता है? क्या यह क्वेरी परिणामों को स्मृति में रखता है या क्या यह किसी प्रकार की अस्थायी पढ़ने/लिखने वाली फ़ाइल बनाता है? मैं उन मुद्दों में भागना नहीं चाहता हूं जहां बड़े डेटासेट से पूछताछ करने से डिवाइस को स्मृति से बाहर निकलता है।

+0

[कर्सरविंडो] (http://developer.android.com/reference/android/database/CursorWindow.html) है और ऐसा लगता है कि जब भी आप 'टॉक्सएक्स' ले जाते हैं तो क्वेरी के कुछ हिस्सों को लोड करने के लिए उपयोग किया जाता है। डेटा सीधे डेटाबेस से आना चाहिए। – zapl

+0

"मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जिसके लिए टेबल पर बिटमैप्स स्टोर करना आवश्यक है।" - ick। "इस तालिका में संभवतः 1000 से अधिक छवियां हो सकती हैं।" - अधिक ick। "कारण मैं वर्तमान में फ़ाइल में संग्रहीत नहीं कर रहा हूं क्योंकि मैं डीबी में छवियों को कितनी तेज़ी से पढ़ और लिख सकता हूं।" - परिभाषा के अनुसार, एक फ़ाइल तेज या तेज होगी, क्योंकि SQLite को अपनी सामग्री को फ़ाइल में संग्रहीत करना होगा। – CommonsWare

+0

zapl उस जानकारी के लिए धन्यवाद। @ कॉमन्सवेयर सुनिश्चित नहीं है कि क्या मतलब है: पी मुझे लगता है कि ऐसा लगता है कि यह डीबी से फ़ाइल से पढ़ने के लिए तेज़ या तेज़ होना चाहिए। मैं कर्सर के बारे में बहुत कुछ नहीं जानता कि उन्हें कैसे उपयोग किया जाए ... लेकिन SQLite अत्यधिक अनुकूल नहीं है कि आप इसके डेटा से कैसे पढ़ते हैं? मेरा मतलब है कि फ़ाइल से कई बार छवि डेटा पढ़ने से कर्सर से उन्हें पढ़ने से बहुत धीमा लगता है। – Jona

उत्तर

0

यह एक पुरानी पोस्ट है जो मैंने किया था। मेरा समाधान छवियों को फ़ाइल तालिका में फ़ाइल में सहेजने और सहेजने के लिए सहेजना था। यह क्लीनर था और बहुत तेज लग रहा था।

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

1

यदि मुझे याद है, तो यह स्मृति में कैश किए गए कई परिणाम रखेगा। यह आमतौर पर soft heap limit से नीचे रहना चाहिए। यह एक सलाहकार सीमा है, इसलिए यह एसक्यूएल_ओएनएमएम की तुलना में सीमा से आगे बढ़ना पसंद करेगी।

मुझे विश्वास नहीं है कि यह किसी भी कैशिंग तंत्र के लिए डिस्क पर लिखता है। जब तक प्रत्येक छवि स्मृति में फिट हो सकती है, और वे इंडेक्स में नहीं हैं, यह एक मुद्दा नहीं होना चाहिए।

मैं एंड्रॉइड प्रोग्रामर नहीं हूं, इसके लायक होने के लिए। इनमें से कुछ चीजों को अनुकूलित किया जा सकता था।

पृष्ठभूमि के रूप में, sqlite_step डिफ़ॉल्ट लाइब्रेरी में कर्सर है। अगर मैं एंड्रॉइड ने अपने स्वयं के तंत्र को लागू किया है तो मुझे अनजान है। आप अपने पृष्ठ पर dynamic memory allocation के बारे में कुछ सामान्य जानकारी पा सकते हैं।