+ [NSString stringWithContentsOfFile:]性能

时间:2013-03-13 14:29:37

标签: ios objective-c performance io nsstring

我需要在iOS中加载文件,现在我使用+ [NSString stringWithContentsOfFile:]。 文件大多是500kb到5mb。 我加载约。 4mb大文件和仪器和秒表告诉我它需要1.5秒才能加载这个文件。在我看来它有点慢,有没有办法让字符串更快?

编辑:

我尝试了一些事情,现在注意到,NSString的创建是我的问题,需要97%的时间而不是来自磁盘的实际负载。

1 个答案:

答案 0 :(得分:3)

如果您知道编码或可以确定编码(您现在使用的API是基本的),您可以将其视为char缓冲区(以可识别编码的方式)。

我首先使用内存映射数据(mmap)打开它,您也可以使用NSData来解决此问题。 madvise可用于暗示您将如何访问该文件。

如果内存映射I / O占用过多内存供您使用,则应下拉到增量读取,如CI / O设施 - fopenfread等。这通常需要比内存映射数据更多的I / O事件(可能会慢得多,具体取决于数据的访问方式)。

在这两种情况下,您都会将字符串视为C字符串 - 不要只是在打开时将整个文件转换为NSString

Foundation有很多技巧,所以请确保这实际上提高了特定用例的性能。

如果这些解决方案太难以供您使用,请考虑使用较小的文件(划分现有文件)。