2013-06-09 13 views
5

मैं उस डेटा और जानकारी वाले कस्टम ऑब्जेक्ट्स के NSMutableArray में डेटा को प्राप्त करने और सहेजने का प्रयास कर रहा हूं।बड़े डेटा का आयात, प्रदर्शन और कैशिंग

हर बार जब उपयोगकर्ता ऐप खोलता है तो वही डेटा स्रोत से लोड होता है और कस्टम ऑब्जेक्ट्स के साथ मेरी प्यारी सरणी में परिवर्तित हो जाता है। इसमें काफी समय लगता है (~ 10-20s) और ऐप को गूंगा की तरह बनाता है। तो क्या मैं डेटा प्राप्त करें और जैसे this link

मैं क्या करने की कोशिश की में प्रदर्शित करने की कोशिश की:

  • एक फाइल करने के लिए कस्टम वस्तुओं के साथ सरणी बचाने के लिए और अगले एप्लिकेशन प्रारंभ होने पर इस फ़ाइल को लोड (यदि पाया जाता है) के बिना फिर से स्क्रैच से कस्टम ऑब्जेक्ट बनाने की आवश्यकता है।
  • कस्टम ऑब्जेक्ट एन्कोड & डीकोड परीक्षण में काफी समय लगता है। भले ही आप इसे NSUserDefault में सहेज लें।

कोई भी इस प्रश्न का उत्तर देने से पहले कृपया। नमूना कोड पर नज़र डालें और यह सुनिश्चित करने के लिए इसे चलाएं कि डेटा को पुनर्प्राप्त करके और इसे प्रदर्शित करके मेरा क्या मतलब है। नमूना को फिर से लॉन्च करने के बाद तेज़ समय में और जो मैं अधिक स्पष्ट करना चाहता हूं :)

यदि कोई यह sample मेरे लिए अधिक स्पष्ट कर सकता है तो मैं आभारी रहूंगा।

+0

क्या आप कोर डेटा का उपयोग कर रहे हैं? आपका बड़ा डेटा कहां से आ रहा है? जब भी उपयोगकर्ता ऐप लॉन्च करता है तो क्या इसे वास्तव में आयात करने की आवश्यकता होती है? –

+0

मान लें कि मैं मूल कैलेंडर से सभी घटनाएं प्राप्त करने का प्रयास कर रहा हूं या ऐप चलाने पर सभी संपर्क प्राप्त करने का प्रयास कर रहा हूं, फिर कस्टम ऑब्जेक्ट्स के साथ सरणी भरें जिसमें संपर्क या ईवेंट विवरण शामिल हैं ??? – Omarj

+0

@AmyWorrall जैसे मैंने पहले कहा था कि अगर मैं इसे डेटाबेस में सहेजना चाहता हूं तो इसे एन्कोड और डीकोड करने की आवश्यकता है और इसमें एक समय लगता है जब सरणी में 3-5k से अधिक रिकॉर्ड होते हैं? – Omarj

उत्तर

0

Thx सब :)

मैं इस सरल tutorial कि नमूना कोड "fetchedResultsController" के कुछ हिस्सों की व्याख्या पाया।

और .pch फ़ाइल में अलग है जहां ZAssert स्थिति शुरू होती है जब ऐप शुरू होता है और पहली बार जोड़ता है।

2

मेरी राय में आपके पास केवल दो उचित विकल्प हैं: 1) स्पष्ट है कि आपके ऑब्जेक्ट्स को प्रबंधित करने के लिए डेटाबेस स्टोर और कोर डेटा का उपयोग करना स्पष्ट है। 2) यदि आप कोर डेटा का उपयोग नहीं करना चाहते हैं, तो आप अपनी प्रत्येक कस्टम ऑब्जेक्ट को अलग से स्टोर कर सकते हैं ताकि आप उन्हें बैचों में लोड कर सकें।

आप दूसरा विकल्प आप कर सकते हैं के लिए जाना चाहते हैं:

1) अपने कस्टम वस्तु पर NSCoding प्रोटोकॉल को लागू करें। (यह बॉयलरप्लेट कोड का थोड़ा सा है, बहुत सरल है) 2) डेटा लोड करने के बाद आप असीमित रूप से इसे डिस्क पर सहेज सकते हैं (इस तरह आप यूआई को अवरुद्ध नहीं करेंगे)। 3) जब ऐप लॉन्च होता है, तो आप अपनी ऑब्जेक्ट्स का बैच लोड कर सकते हैं (उदाहरण के लिए 20, यह मानते हुए कि आप केवल एक दिए गए बिंदु पर ~ 10 प्रदर्शित करेंगे)। फिर जब उपयोगकर्ता आपकी सामग्री के माध्यम से स्क्रॉल करता है तो आप उसी हिस्से में असीमित रूप से इसे अधिक लोड कर सकते हैं ताकि जब आवश्यक हो तो वे प्रदर्शित होने के लिए तैयार हो जाएंगे।

इससे आपके ऐप के प्रदर्शन में काफी सुधार होना चाहिए। यदि आप कोर डेटा का उपयोग करते हैं, तो इसके बजाय, आप इसे [NSFetchRequest fetchBatchSize] प्रॉपर्टी सेट करके समान व्यवहार का उपयोग कर सकते हैं। यह स्वचालित रूप से बैचों में डेटा लाने का ख्याल रखेगा।

0

मैं आपको एक बहुत ही सरल समाधान की सिफारिश कर रहा हूं जिसे मैंने कई बार उपयोग किया है और यह भी बहुत कुशल है। फाइल सिस्टम पर

  1. वीडियो डाउनलोड करें यदि डाउनलोड तो फ़ाइल लिखने सफल
  2. SQLite अगली बार जांच करने के लिए
  3. पथ अगर एक ही नाम या एक ही आईडी
  4. साथ फ़ाइल SQLite फ़ाइल में भी मौजूद है यदि हाँ तो SQLite
  5. से वीडियो खेलने
  6. अन्यथा चरण एक पर जाएं।

इस समाधान के लिए आपको एक नया प्रबंधक वर्ग बनाना होगा जो आपको यह सुनिश्चित करेगा कि आपको डेटा कहाँ प्राप्त करना है।

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