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