2011-08-06 7 views
5

कहें कि मेरे पास एक इकाई 'कर्मचारी' है जो कई अन्य रिश्ते 'विभागों' के साथ एक अन्य इकाई 'विभाग' में है। अगर मेरे पास कर्मचारी ऑब्जेक्ट का उदाहरण है और विभाग संग्रह वर्तमान में एक गलती है, तो विभागों की गिनती करने के लिए सबसे मेमोरी प्रभावी तरीका क्या है?क्या कई कोरडाटा रिलेशनशिप गलती पर 'गिनती' को कॉल करना संग्रह में सभी वस्तुओं को स्मृति में लाता है?

दो स्पष्ट विकल्प हैं:

1) [myEmployee.departments count];

2 बुला) एक fetchRequest का निर्माण केवल विभाग मेरी कर्मचारी वस्तु को जिसका मिलान 'कर्मचारी' संबंध अंक वस्तुओं और फिर वापस जाने के लिए बुला countForFetchRequest:

मेमोरी उपयोग के अलावा या तो इनमें से एक तरीका गैर-लापरवाही से तेज होगा तो दूसरा?

उत्तर

0

रिलेशनशिप तब तक नहीं लाए जाते जब तक कि आपके पास रिश्ते नहीं है KeyPathsForPrefetching।

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

एक उपकरण, जो उपयोग करना बहुत आसान है, उपकरण है, जो एक्सकोड में शामिल है।

आप दोनों दृष्टिकोणों का उपयोग करके आसानी से परीक्षण चला सकते हैं, और वास्तव में एसओ पर कुछ अजनबी की राय लेने के बजाय संख्याओं की तुलना कर सकते हैं।

0

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

दूसरा: आप countForFetchRequest विधि का उपयोग करें, तो अनुरोध होगा:

NSFetchRequest *f = Departament.fetchRequest; 

f.predicate = [NSPredicate predicateWithFormat:@"ANY employees = %@", employe.objectID]; 

तो CoreData प्रत्येक विभाग कर्मचारियों देखने के लिए जांच करना चाहिए। अभ्यास में अधिक धीमी है।

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