Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于iPhone的低内存占用的CSV解析器_Iphone_Objective C_Cocoa_Csv - Fatal编程技术网

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

用于iPhone的低内存占用的CSV解析器,iphone,objective-c,cocoa,csv,Iphone,Objective C,Cocoa,Csv,在用仪器测试我的应用程序后,我意识到我当前使用的应用程序占用了大量内存。有人推荐使用内存占用率低的CSV解析器吗?还有其他一些CSV解析器可以尝试: (我自己的博客) 您可以进行实验,看看两者是否都能降低内存开销 它们都不支持“基于事件”的解析。在基于事件的解析中,您永远不会将整个源文件加载到内存中,只需将足够的文件加载到当前行即可(您也可以在下载过程中执行此操作)。您必须在读取每一行时对其进行处理,并确保源中的所有数据在行之间被释放 这将是理论上开销最低的解决方案。如果您确实需要较低的开

在用仪器测试我的应用程序后,我意识到我当前使用的应用程序占用了大量内存。有人推荐使用内存占用率低的CSV解析器吗?

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

  • (我自己的博客)
您可以进行实验,看看两者是否都能降低内存开销

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


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

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

一个快速修复方法是在循环的lop处创建一个NSAutoreleasePool,并在底部将其排空:

while ( ![scanner isAtEnd] ) {        
    NSAutoreleasePool *innerPool = [[NSAutoreleasePool alloc] init];
。。。一堆代码

    [innerPool drain];
}

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

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

框架:

一些使用说明文件:

PKTokenizer类:


Thx哑光。我决定暂时使用Marks解决方案,因为它比切换解析器需要更少的测试。但是现在我的路线图是切换到基于事件的解析器。Libcsv()似乎是其中之一。