2011-12-22 20 views
5

मेरी AuthorNSManagedObject मॉडल एक authorID विशेषता (सर्वर द्वारा निर्धारित) है, तो तुलना करें, तो एक NSFetchRequest में बेहतर प्रदर्शन करेगा अगर authorID बजाय पूरा Author वस्तु द्वारा NSPredicate फिल्टर? मान लें कि मैं एक निश्चित author द्वारा सभी BookNSManagedObject एस ला रहा हूं। कौन सा predicateFormat बेहतर है?कोर डाटा प्रदर्शन: NSPredicate वस्तुओं

[NSPredicate predicateWithFormat:@"author = %@", anAuthor] 

या

[NSPredicate predicateWithFormat:@"author.authorID = %@", anAuthor.authorID] 

इस प्रोफाइल के लिए सबसे अच्छा तरीका क्या है? मेरे पास कोर डेटा परीक्षण OCUnit (SenTestingKit) के साथ काम कर रहा है। क्या आईओएस में Ruby's Benchmark module की तरह कुछ है?

+0

क्या आपके पास लाने के दौरान लेखक का ऑब्जेक्ट हाथ है? यदि आप लेखक ऑब्जेक्ट का उपयोग करना चाहते थे, तो मुझे लगता है कि आपको इसे पहले लाने की आवश्यकता होगी और उसके बाद उस लेखक द्वारा पुस्तकों के लिए दूसरा अनुरोध करें (डेटाबेस में 2 ट्रिप)। यदि आपके पास पहले से ही आईडी है तो आप एक fetch अनुरोध के साथ आवश्यक परिणाम प्राप्त कर सकते हैं। – Rog

+0

यह आपकी समस्या का समाधान नहीं करेगा लेकिन आप बेहतर जानते हैं कि ऐप्पल दस्तावेज़ीकरण बताता है कि भविष्यवाणी लिखते समय आपको '==' और न केवल '=' का उपयोग करना चाहिए। –

उत्तर

1

-com.apple.CoreData.SQLDebug 1 के तर्क के साथ अपने ऐप को चलाने के लायक हो सकता है, विस्तृत here के रूप में।

तब आप देख सकते हैं कि कोर डेटा दोनों परिस्थितियों में एक ही एसक्यूएल को निष्पादित कर रहा था (मान लीजिए कि आप एक SQLite स्टोर का उपयोग कर रहे हैं)।

0

पहला वाला (केवल Author का उपयोग करके) शायद तेज़ होगा, लेकिन केवल परीक्षण आपको निश्चित रूप से बताएगा।

आप Author के लिए एक रिश्ता है कि (जैसे Book) वस्तुओं को लाने और आप एक विधेय का उपयोग करते हैं

[NSPredicate predicateWithFormat:@"author = %@", anAuthor] 

SQLite देख सकते हैं Book से Author को मर्ज तालिका दी author लिए सही प्राथमिक कुंजी है । दूसरे शब्दों में, भविष्यवाणी Author इकाइयों प्राथमिक कुंजी के लिए चेक में बदल जाती है। कोरडाटा को अभी भी विलय तालिका से परामर्श करना है, हालांकि।

आप

[NSPredicate predicateWithFormat:@"author.authorID = %@", anAuthor.authorID] 

का उपयोग करते हैं तो SQLite वास्तविक Author तालिका के साथ join मर्ज तालिका करना होगा और फिर जिसके परिणामस्वरूप authorID स्तंभ से मेल खाते हैं। यह और काम होगा। और authorID अनुक्रमित नहीं होने पर यह टूट जाएगा।

+0

मैं इसी तरह की भविष्यवाणी डीबग करते समय इस पर आया; मैं आपके पहले उदाहरण में उसी प्रारूप का उपयोग करके, कार्य करने के लिए एक ऑब्जेक्ट आधारित अनुमान प्राप्त करने में सक्षम नहीं हूं। एसक्लाइट में सीधे डेटा का निरीक्षण करने से पुष्टि होती है कि यह काम नहीं कर रहा है। मैं और जानना चाहता हूं, या समझ सकता हूं कि यह क्यों काम नहीं कर रहा है – wkhatch

+0

एसक्यूएल अनुरोध कैसा दिखता है? आप किस तरह का निरीक्षण कर रहे हैं? –

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