2014-12-04 6 views
5

मेरे पास एंड्रॉइड फ्रेमवर्क से संबंधित कुछ प्रश्न हैं जो मुझे android developer's site या कहीं और नहीं मिल सका। तो, मैं यहां पूछने के लिए लुभाना चाहता हूं।एंड्रॉइड में ContentProviders की दक्षता का मूल्यांकन कैसे करें?

मैं इन प्रश्न के लिए कहा गया था एक साक्षात्कार में कहा कि:

आप एंड्रॉयड में ContentProviders की दक्षता का मूल्यांकन होगा?

यदि आप 3000 संपर्क लाने के लिए चाहते हैं तो कितना समय लगता है? यदि आप ईमेल के संपर्कों को भी प्राप्त करना चाहते हैं तो क्या यह वही समय लगेगा?

+0

ऐसा लगता है कि तालिका में एक कॉलम के लिए पूछताछ के समय के अंतर और एक से अधिक के लिए पूछताछ के बारे में एक सवाल है। और वह सिर्फ एक डीबी सवाल करने के लिए नीचे उबाल चाहिए, विशेष रूप से, SQLite, इस मामले में, के बाद से है कि एंड्रॉयड में प्रारूप, डिफ़ॉल्ट रूप से है। या क्या मैं कुछ न कुछ भूल रहा हूं ? –

+0

1) "दक्षता" कोई परिभाषित अर्थ नहीं है। आप जो कुछ भी चाहते हैं उसका जवाब दे सकते हैं। 2 ए) डिवाइस पर निर्भर करता है और यह कितना तेज़ है। 2 बी) डेटाबेस स्कीमा को जानने के बिना जानना असंभव है। और 'ContentProvider' के मामले में भी कम है क्योंकि उनको डेटाबेस नहीं होना चाहिए। उन्हें एक भरोसेमंद webservice द्वारा समर्थित किया जा सकता है। – zapl

उत्तर

2

पहला सवाल

इसमें कितना समय ले करता है अगर आप 3000 संपर्क लाने के लिए करना चाहते हैं? O (n)

दूसरा सवाल

यह एक ही समय अगर ले जाएगा: -

> डिवाइस की गति पर निर्भर करता है, वैसे भी समय जटिलता इनपुट आकार में रेखीय है आप ईमेल के संपर्कों को के रूप में अच्छी तरह से लाने के लिए चाहते हैं?

-> AFAIK संपर्कों के ईमेल डेटा में मेज, कच्चे संपर्क की एक उप खंड, और प्रत्येक संपर्क एक से अधिक ईमेल हो सकता है, इसलिए शायद आप सभी प्राप्त करने के लिए अधिक समय की आवश्यकता केवल संपर्क प्राप्त करने की तुलना में सभी संपर्कों के ईमेल।

संपर्क प्रदाता एक एंड्रॉइड सामग्री प्रदाता घटक है।यह रूप में

enter image description here

अधिक जानकारी HERE

0

यह तालिका प्रश्न से सिर्फ एक चुनिंदा * है। उत्तर तालिका से चुनने के लिए यह अधिक कुशल है (कॉलम आपको चाहिए)।

सामग्री प्रदाता से पढ़ने के लिए सबसे अच्छा केस सेनारियो प्राप्त होता है जब प्रक्षेपण में केवल वे कॉलम होते हैं जिनका आप उपयोग करना चाहते हैं और आपके पास डेटा पढ़ने के लिए एक अच्छी तरह से कोडित पाश है।

यदि आप प्रक्षेपण के लिए शून्य पास करते हैं तो यह वही समय लगेगा क्योंकि सामग्री प्रदाता के सभी कॉलम दोनों कॉल पर वापस आ जाएंगे।

पहले पर यदि आप प्रक्षेपण और 2 पास आप पारित लिए KEY_ID पारित फोन {KEY_ID, key_email} 2 पास अधिक समय लगेगा क्योंकि सामग्री प्रदाता अधिक डेटा

लौटने

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

ध्यान दें कि कोई चाल नहीं है टॉफ़र्स्ट() यह स्क्लेइट के लिए सबसे तेज़ पठन लूप है जो पहले कॉल को स्थानांतरित करने के लिए टॉन्क्स्ट() आपके लिए moveFoFirst() करता है।

if (cursor !=null) { 
    //get column indexes here 
while (cursor.moveToNext()){ //processing here } 
} 
cursor.close()} 
1

में सचित्र जिनमें से प्रत्येक प्रदाता द्वारा की पेशकश की एक मेज से मेल खाती है, आप कैसे मूल्यांकन करेंगे एक व्यक्ति के बारे में डेटा के तीन प्रकार का कहना है, एंड्रॉइड में ContentProviders की दक्षता?

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

यदि आप 3000 संपर्क लाने के लिए चाहते हैं तो कितना समय लगता है?

कोड और उपाय चलाएँ। विभिन्न उपकरणों और संस्करणों पर अलग होगा।

यदि आप ईमेल के संपर्कों को भी प्राप्त करना चाहते हैं तो क्या यह वही समय लगेगा?

ईमेल और बाकी प्रकार के "डेटा" शायद in same table है। प्रत्येक रिकॉर्ड के अनुसार डेटा के MIME प्रकार है, इसलिए "ईमेल" एक अतिरिक्त रिकॉर्ड लाने की आवश्यकता होगी। एक अच्छी तरह से गठन क्वेरी, एक भी बार में कई प्रकार के डेटा लाने तो इसकी अप-टू कर्सर प्रसंस्करण कोड के बीच अंतर यह कर सकते हैं।

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