我需要在iOS中加载文件,现在我使用+ [NSString stringWithContentsOfFile:]
。
文件大多是500kb到5mb。
我加载约。 4mb大文件和仪器和秒表告诉我它需要1.5秒才能加载这个文件。在我看来它有点慢,有没有办法让字符串更快?
编辑:
我尝试了一些事情,现在注意到,NSString的创建是我的问题,需要97%的时间而不是来自磁盘的实际负载。
答案 0 :(得分:3)
如果您知道编码或可以确定编码(您现在使用的API是基本的),您可以将其视为char
缓冲区(以可识别编码的方式)。
我首先使用内存映射数据(mmap
)打开它,您也可以使用NSData
来解决此问题。 madvise
可用于暗示您将如何访问该文件。
如果内存映射I / O占用过多内存供您使用,则应下拉到增量读取,如CI / O设施 - fopen
,fread
等。这通常需要比内存映射数据更多的I / O事件(可能会慢得多,具体取决于数据的访问方式)。
在这两种情况下,您都会将字符串视为C字符串 - 不要只是在打开时将整个文件转换为NSString
。
Foundation有很多技巧,所以请确保这实际上提高了特定用例的性能。
如果这些解决方案太难以供您使用,请考虑使用较小的文件(划分现有文件)。