用于iPhone的低内存占用的CSV解析器
在用仪器测试我的应用程序后,我意识到我当前使用的应用程序占用了大量内存。有人推荐使用内存占用率低的CSV解析器吗?还有其他一些CSV解析器可以尝试:用于iPhone的低内存占用的CSV解析器,iphone,objective-c,cocoa,csv,Iphone,Objective C,Cocoa,Csv,在用仪器测试我的应用程序后,我意识到我当前使用的应用程序占用了大量内存。有人推荐使用内存占用率低的CSV解析器吗?还有其他一些CSV解析器可以尝试: (我自己的博客) 您可以进行实验,看看两者是否都能降低内存开销 它们都不支持“基于事件”的解析。在基于事件的解析中,您永远不会将整个源文件加载到内存中,只需将足够的文件加载到当前行即可(您也可以在下载过程中执行此操作)。您必须在读取每一行时对其进行处理,并确保源中的所有数据在行之间被释放 这将是理论上开销最低的解决方案。如果您确实需要较低的开
- (我自己的博客)
这将是理论上开销最低的解决方案。如果您确实需要较低的开销,您应该调整现有的解决方案来做到这一点(我没有关于如何做到这一点的任何建议)。您可能应该逐行执行此操作,而不是读取整个文件,对其进行解析,然后返回包含其中所有行的数组。在任何情况下,链接到的代码都会在循环中生成无数临时对象,这意味着它将有非常高的内存开销 一个快速修复方法是在循环的lop处创建一个NSAutoreleasePool,并在底部将其排空:
while ( ![scanner isAtEnd] ) {
NSAutoreleasePool *innerPool = [[NSAutoreleasePool alloc] init];
。。。一堆代码
[innerPool drain];
}
这将清除临时对象,因此内存使用量将是数据的大小,再加上文件中每个字符串的一个对象(大约8字节*行*列)它不是CSV解析器,但是,我的开源Cocoa ParseKit框架有一个功能强大/方便/可配置的字符串标记器,它对于CSV或其他类型的解析/标记化可能很方便 框架: 一些使用说明文件: PKTokenizer类:
Thx哑光。我决定暂时使用Marks解决方案,因为它比切换解析器需要更少的测试。但是现在我的路线图是切换到基于事件的解析器。Libcsv()似乎是其中之一。