سؤال

ولدي البرمجية التالية - طرق لقراءة ملفات XML. ولكنه يعمل ببطء شديد بالنسبة لي. ليس هناك أي وسيلة كافية لجلب وقراءة البيانات بشكل أسرع.

if(connectionRemaining)
{
    [self LoadingPopUp];
    NSURL *tmpURl=[NSURL URLWithString:[NSString stringWithFormat:@"%@getcategory.php",[iGolfAppDelegate getServerPath]]];
    NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL:tmpURl];
    NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
    if(conn)
        myWebData=[[NSMutableData data] retain];
    connectionRemaining=NO;
}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[myWebData setLength: 0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[myWebData appendData:data];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
[connection release];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
//  NSString *theXML = [[NSString alloc] initWithBytes: [myWebData mutableBytes] length:[myWebData length] encoding:NSUTF8StringEncoding];
//  NSLog(@"%@",theXML);[theXML release];   
if( myXMLParser )
    [myXMLParser release];
myXMLParser = [[NSXMLParser alloc] initWithData: myWebData];
[myXMLParser setDelegate: self]; [myXMLParser setShouldResolveExternalEntities: YES];
[myXMLParser parse];[connection release];[myWebData release];
}

#pragma mark
#pragma mark XMLParsing Methods
-(void)parser:(NSXMLParser*)parser didStartElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qualifiedName attributes:(NSDictionary*)attributeDict {
if([elementName isEqualToString:@"category"])
    categoryArray=[[NSMutableArray alloc]init];
else if([elementName isEqualToString:@"Prop_Category"])
    aCategory=[[Category alloc] init];
}

-(void)parser:(NSXMLParser*)parser foundCharacters:(NSString*)string {
if(!currentElementValue)
    currentElementValue=[[NSMutableString alloc] initWithString:string];
else
    [currentElementValue appendString:string];
}
-(void)parser:(NSXMLParser*)parser didEndElement:(NSString*)elementName namespaceURI:(NSString*)namespaceURI qualifiedName:(NSString*)qualifiedName {
if([elementName isEqualToString:@"category"])
{ [LoadingAlert dismissWithClickedButtonIndex:0 animated:YES]; [LoadingAlert release];[self categoryPickerDiplay]; return;  }
else if([elementName isEqualToString:@"Prop_Category"])
{ [categoryArray addObject:aCategory];[aCategory release];aCategory=nil; }
else{   
    [aCategory setValue:currentElementValue forKey:elementName];
    [currentElementValue release];currentElementValue=nil;
}

و}

واسمحوا لي أن أوضح سؤالي مرة أخرى.

ولقد لوحظ أن هذه الطريقة في أكس القراءة ليست كافية. باستخدام هذه الطريقة البيانات الأحمال فون ببطء شديد. لأنه سوف فون قراءة ومقارنة كل علامة في كل مرة.

وأريد بعض أسرع XML تحميل وتوزيع.

وشكرا مقدما على تقاسم علمك معي

هل كانت مفيدة؟

المحلول

وهناك مثال من أبل دعا XMLPerformance يوضح libxml مقابل NSXMLParser من حيث الأداء. تحقق من تنفيذها لlibxml.

نصائح أخرى

ونماذج التعليمات البرمجية SiesmicXML وTopSongs من شركة تطوير العقبة تظهر بعض الطرق من XML الاعراب التي تتسبب في الحد الأدنى من الوقت المستخدم الانتظار.

هل نظرت إلى libxml C مكتبة، أو TouchXML المجمع لذلك؟ أيضا، هل أنت متأكد أنه هو NSXMLParser التي تتسبب في تباطؤ الخاص بك؟ قد ترغب في القيام runthrough سريع باستخدام الآلات أو سمك القرش لمحة عن تطبيق والعثور على النقاط الساخنة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top