【问题标题】:GDataXMLDocument Memory IncreaseGDataXMLDocument 内存增加
【发布时间】:2012-03-18 22:04:12
【问题描述】:

大家好,我正在使用Ray 提供的 rss 阅读器,这很棒。该应用程序需要解析一个相当大的 xml 文件,大约 7MB。该过程运行良好,我可以下载并解析内容并将其保存到数据库中。但是,我对内存有一个主要问题。在 Instruments 中运行时,它会上升到大约 30mb,虽然它只有 30-40 秒,但它会在我第一次运行时执行下载和解析时使应用程序崩溃。

对此的任何帮助将不胜感激。我认为导致主要问题的代码是:

- (void)requestFinished:(ASIHTTPRequest *)request {


    //////// problem code /////////
        NSError *error;

    GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:[request responseData] 
                                                       options:0 error:&error];
    [_queue addOperationWithBlock:^{

    if (doc == nil) { 


    } else {

        entries = [NSMutableArray array];

        [self parseFeed:doc.rootElement entries:entries];                

        [[NSOperationQueue mainQueue] addOperationWithBlock:^{

            for (RSSEntry *entry in entries) {

                int insertIdx = [_allEntries indexForInsertingObject:entry sortedUsingBlock:^(id a, id b) {
                    RSSEntry *entry1 = (RSSEntry *) a;
                    RSSEntry *entry2 = (RSSEntry *) b;
                    return [entry1.articleDate compare:entry2.articleDate];


                    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
                    //... do everything I've done before...
                    [pool drain];


                }];

                [_allEntries insertObject:entry atIndex:insertIdx];

                entries = 0;

            }                            

        }];

    }   

        //[doc release];
        //doc = nil;

}];

[doc release];
doc = nil;
[error release];

}

【问题讨论】:

  • 可能其他地方有内存泄漏。

标签: iphone ios memory memory-management xml-parsing


【解决方案1】:

Ray Wenderlich 的网站也有一篇关于advantages of various XML parsers 的文章。 GDataXML 解析器似乎具有较大的内存占用之一,您可能需要更改为 TBXML 之类的内容。

【讨论】:

  • 感谢我尝试了 TMXML,它仍然占用高达 32MB 的内存。实际文件只有 7MB,所以我不明白为什么它会增加这么多。我应该考虑使用 SAX 解析器吗?任何工作示例将不胜感激。
  • 对不起,我没有意识到 TBXML 是一个 DOM 解析器。您应该尝试使用 SAX 解析器。内置的 NSXMLParser 有点难以使用,但我使用了来自 Big Nerd Ranch 网站 (weblog.bignerdranch.com/?p=48) 的代码来学习它。我解析的 XML 只有大约 1 MB,但它是在内存很少的 iPhone 3G 上处理的。我假设内存增加是因为 DOM 解析器将 XML 文档保存在内存中,然后同时从中创建了许多对象。对象可能比 XML 表示形式更大。
  • 嗨,谢谢你有一个我可以查看的工作示例。再次感谢您的快速回复。
  • 抱歉,我没有工作示例。我第一次使用该示例代码为我的应用程序编写一个代码时花了我几个小时。使用起来不是那么愉快,但如果它可以防止你的崩溃,那就值得了。
猜你喜欢
  • 2013-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2011-01-03
  • 2016-08-30
  • 2019-03-28
相关资源
最近更新 更多