在使用Instruments测试我的应用程序后,我意识到我当前使用的CSV parser具有巨大的内存占用。有没有人推荐一个内存占用少的机器?
发布于 2010-06-13 14:14:29
您可能应该逐行执行此操作,而不是读取整个文件,解析它,然后返回一个包含所有行的数组。在任何情况下,您所链接的代码都会在一个循环中产生无数的临时对象,这意味着它将具有非常高的内存开销。
一种快速的解决方法是在循环的lop处创建一个NSAutoreleasePool,并在底部将其排出:
while ( ![scanner isAtEnd] ) {
NSAutoreleasePool *innerPool = [[NSAutoreleasePool alloc] init];..。一堆代码。
[innerPool drain];
}这将清除临时对象,因此内存使用量将是数据的大小,加上文件中每个字符串的对象(大约8字节*行*列)
发布于 2010-06-13 13:46:28
还有一些其他的CSV解析器可以尝试:
您可以进行实验,看看这两种方法是否都能降低内存开销。
它们都不支持“基于事件”的解析。在基于事件的解析中,您永远不会将整个源文件加载到内存中,只需要足够的文件来读取当前行(您也可以在下载过程中执行此操作)。您必须在读取每一行时对其进行处理,并确保在行之间释放来自源的所有数据。
这将是理论上开销最低的解决方案。如果你真的需要低开销,你应该调整现有的解决方案来做到这一点(我没有任何关于如何做到这一点的建议)。
发布于 2010-06-15 05:52:04
它不是一个CSV解析器,但我的开源Cocoa ParseKit框架有一个强大的/方便的/可配置的字符串标记器,对于CSV或其他类型的解析/标记化可能很方便。
框架:
一些使用文档:
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
https://stackoverflow.com/questions/3031181
复制相似问题