3

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

编辑:

我尝试了一些事情,现在注意到,创建 NSString 是我的问题,它需要 97% 的时间,而不是从磁盘真正加载。

4

1 回答 1

3

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

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

如果内存映射 I/O 消耗了太多内存供您使用,您应该下降到增量读取,例如 CI/O 设施 - fopenfread等。这通常需要比内存映射数据更多的 I/O 事件(可能很多较慢,具体取决于访问数据的方式)。

在这两种情况下,您都会将该字符串视为 C 字符串——不要NSString在打开时简单地将整个文件转换为一个。

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

如果这些解决方案对您来说太“核心”,只需考虑改用较小的文件(划分现有文件)。

于 2013-03-13T15:10:15.820 回答