首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于iPhone的低内存占用的CSV解析器

问用于iPhone的低内存占用的CSV解析器
EN

Stack Overflow用户
提问于 2010-06-13 13:18:57
回答 3查看 4.3K关注 0票数 7

在使用Instruments测试我的应用程序后,我意识到我当前使用的CSV parser具有巨大的内存占用。有没有人推荐一个内存占用少的机器?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-13 14:14:29

您可能应该逐行执行此操作,而不是读取整个文件,解析它,然后返回一个包含所有行的数组。在任何情况下,您所链接的代码都会在一个循环中产生无数的临时对象,这意味着它将具有非常高的内存开销。

一种快速的解决方法是在循环的lop处创建一个NSAutoreleasePool,并在底部将其排出:

代码语言:javascript
复制
while ( ![scanner isAtEnd] ) {        
    NSAutoreleasePool *innerPool = [[NSAutoreleasePool alloc] init];

..。一堆代码。

代码语言:javascript
复制
    [innerPool drain];
}

这将清除临时对象,因此内存使用量将是数据的大小,加上文件中每个字符串的对象(大约8字节*行*列)

票数 5
EN

Stack Overflow用户

发布于 2010-06-13 13:46:28

还有一些其他的CSV解析器可以尝试:

您可以进行实验,看看这两种方法是否都能降低内存开销。

它们都不支持“基于事件”的解析。在基于事件的解析中,您永远不会将整个源文件加载到内存中,只需要足够的文件来读取当前行(您也可以在下载过程中执行此操作)。您必须在读取每一行时对其进行处理,并确保在行之间释放来自源的所有数据。

这将是理论上开销最低的解决方案。如果你真的需要低开销,你应该调整现有的解决方案来做到这一点(我没有任何关于如何做到这一点的建议)。

票数 3
EN

Stack Overflow用户

发布于 2010-06-15 05:52:04

它不是一个CSV解析器,但我的开源Cocoa ParseKit框架有一个强大的/方便的/可配置的字符串标记器,对于CSV或其他类型的解析/标记化可能很方便。

框架:

http://parsekit.com

一些使用文档:

http://parsekit.com/tokenization.html

PKTokenizer类:

http://github.com/itod/parsekit/blob/master/include/ParseKit/PKTokenizer.h http://github.com/itod/parsekit/blob/master/src/PKTokenizer.m

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3031181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档