2010-12-13 14 views
14

मुझे उत्सुकता है कि किसी ने ContentProvider पर ContentResolver के माध्यम से एक ही प्रक्रिया में SQLiteDatabase ऑब्जेक्ट से पूछताछ के विरुद्ध कोई प्रदर्शन परीक्षण किया है। मुझे लगता है कि ContentResolver क्वेरी एक कर्सर वापस भेजती है जो एक बाइंडर (एंड्रॉइड आईपीसी) के माध्यम से डेटाबेस के साथ संचार करती है। इसका मतलब यह है कि अगर मैंने Cursor के माध्यम से 100 रिकॉर्ड की सामग्री पढ़ी है तो 100 बाइंडर विधि कॉल का परिणाम होगा। क्या मेरे अनुमान सही हैं और यदि ऐसा है तो यह उसी प्रक्रिया में डेटाबेस तक पहुंचने से काफी धीमा होगा?एंड्रॉइड कंटेंटप्रोवाइडर प्रदर्शन

+0

एक साइड नोट के रूप में, मैंने 800 मेगाहट्र्ज एंड्रॉइड डिवाइस पर रिमोट विधियों को कॉल के खिलाफ स्थानीय तरीकों से कॉल की तुलना में एक परीक्षण किया। एक साधारण 26 वर्ण स्ट्रिंग पैरामीटर के साथ रिमोट विधि को कॉल करने से स्थानीय विधि को कॉल करने से 400 नैनोसेकंड अधिक समय लगता है। एक 10,000 चरित्र स्ट्रिंग पैरामीटर भेजना 2.3 मिलीसेकंड लंबा लेता है। स्पष्ट रूप से अधिक डेटा भेजा जा रहा है (या प्राप्त) जितना अधिक समय लगेगा। – satur9nine

+0

कुछ मैंने सीखा है: ContentProviders द्वारा पारित कर्सर में एक कर्सरविंडो होता है, कर्सरविंडो कर्सर 2 एमबी आकार का कैश क्षेत्र है, अधिकांश प्रश्न पूरे बफर में फिट होंगे। इस प्रकार कर्सर से डेटा तक पहुंचने से आम तौर पर एक बाइंडर विधि कॉल शुरू नहीं होता है क्योंकि सभी डेटा पहले से मौजूद हैं, हालांकि यदि आप कर्सर विन्डो के बाहर एक विशाल कर्सर में डेटा पढ़ने का प्रयास करते हैं तो विंडो को स्थानांतरित करने की आवश्यकता होगी और कैश पर असर होगा बांधने वाला – satur9nine

उत्तर

3

मैंने बिल्कुल ठीक नहीं किया है। मैंने जो किया वह ContentProvider के माध्यम से या सीधे SQLite डेटाबेस के माध्यम से एकाधिक प्रविष्टियों के प्रदर्शन को आश्वस्त करना था। मैंने लगभग 1000 आइटम (एक करके एक) डाला। ContentProvider के माध्यम से डालने के लिए यह बहुत धीमा था। मेरे परीक्षण में लगभग 10% धीमी है।

+3

यदि आप 1000 आइटम एक-एक करके सम्मिलित करने जा रहे हैं तो आप 'ContentProviderOperation' का उपयोग करेंगे और' बैचइन्सर्ट 'करेंगे। एक-एक करके 1000 आइटम डालने से आप जो भी इस्तेमाल करते हैं, वह अविश्वसनीय रूप से धीमा होगा, इसलिए मैं इस बेंचमार्क को बहुत अधिक नहीं देखूंगा। मेरे अनुभव में, "ContentProvider' का उपयोग करके" और "ContentProvider' का उपयोग न करने" के बीच का अंतर कभी भी गति/दक्षता के साथ नीचे नहीं आ गया है जिसके साथ संचालन किए जाते हैं। –

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