objective c - This loop chokes on 50,000 lines on the iPhone... can I improve it so it doesn't? -
फ़ाइल * फ़ाइल = फ़ॉपन ([जीपीएसफ़ाइलपैथ यूटीएफ 8 स्ट्रिंग], "आर"); चार सी [1024]; जबकि (fgets (c, 1024, फ़ाइल)! = NULL) {NSString * cString = [[NSString alloc] initWithCString: c एन्कोडिंग: NSMacOSRomanStringEncoding]; NSArray * split = [cString घटकों से पृथकबिस्तरी: @ ","]; यदि ([विभाजित गिनती]! = 3) {continue; // यह केवल पहली पंक्ति पर होना चाहिए} gpx = [gpx stringByAppendingString: [NSString stringWithFormat: @ "& lt; trkpt lat = \"% @ \ "lon = \"% @ \ "& gt; & lt; / trkpt & gt; \ N \ n ", [विभाजित ऑब्जेक्टअटइंडएक्स: 0], [विभाजन ऑब्जेक्टअटइंडएक्स: 1]]]; }
जैसा कि दूसरों ने बताया है, आप बहुत सारे अस्थायी वस्तुओं का निर्माण कर रहे हैं। एक बहुत भयानक। उसके ऊपर, कम से कम जीपीएक्स
वाले, अस्थायी वस्तुओं का आकार, लूप के प्रत्येक पास के साथ बढ़ रहा है। आप ऐसा कुछ करने की कोशिश कर सकते हैं:
NSMutableString * gpx = [NSMutableString स्ट्रिंग]; NSAutoreleasePool * पूल = [[एनएसएयूटीओरियसपुल आलोक] इनिट]; (NSString * पंक्ति में [[NSString stringWithContentsOfFile: जीपीएसफ़ाइलपैथ उपयोग किया गया एन्कोडिंग: NULL त्रुटि: NULL] घटकों से पृथकबिट्टी स्ट्रिंग: @ "\ n"]) {NSArray * split = [रेखा घटकों से पृथक किया गया है: @ ","]; [जीपीएक्स अनुच्छेद स्वरूप: @ "और लेफ्टिनेंट; ट्रिकट लेट = \"% @ \ "लेन = \"% @ \ "& gt; & lt; / trkpt & gt; \ n \ n", [विभाजित ऑब्जेक्टअटइंडेक्स: 0], [विभाजन ऑब्जेक्टअटइंडेक्स: 1 ]]; } [पूल रिलीज]; पूल = नल;
यह उदाहरण gpsFilePath
में मौजूद सामग्री को लोड करता है और इसे नई लाइनों से विभाजित करता है फिर, प्रत्येक पंक्ति के लिए, यह लाइन को अल्पविराम पर विभाजित करता है, और परिणामों को अस्थिर स्ट्रिंग gpx
से जोड़ देता है यह प्रोसेसिंग भाग लपेटता है जो ऑटोरिवेट पूल में बहुत से अस्थायी ऑब्जेक्ट बनाता है, इसलिए जितनी जल्दी हो सके उन्हें त्याग दिया जाता है।
अंत में, चर gpx
में संसाधित परिणाम होंगे ।
Comments
Post a Comment