3

iOS でファイルをロードする必要があるため、+ [NSString stringWithContentsOfFile:]. ファイルはほとんどが 500kb から 5mb です。私は約をロードします。4MB の大きなファイルとインストゥルメントとストップウォッチは、このファイルをロードするのに 1.5 秒かかると教えてくれました。私の意見では、少し遅いですが、文字列を速くする方法はありますか?

編集:

私はいくつかのことを試してみましたが、NSString の作成は私の問題であり、ディスクからの実際の読み込みではなく、97% の時間がかかることに気付きました。

4

1 に答える 1

3

エンコーディングを知っているか、それを判断できる場合 (現在使用している API は基本的なものです)、それをcharバッファとして扱うことができます (エンコーディングを認識する方法で)。

まず、メモリ マップされたデータを使用して開くことから始めます ( をmmap使用してこれにアプローチすることもできますNSData)。madviseファイルへのアクセス方法を示すために使用できます。

メモリ マップド I/O がメモリを消費しすぎて使用できない場合は、CI/O 機能などのインクリメンタル リードに移行するfopen必要freadがあります。これには通常、メモリ マップド データよりも多くの I/O イベントが必要になりますデータへのアクセス方法によっては遅くなります)。

どちらの場合も、文字列を C 文字列として扱います。ファイルをNSString開くときに単純にファイル全体を に変換しないでください。

Foundation には多くのトリックがあるため、これにより実際に特定のユース ケースのパフォーマンスが向上することを確認してください。

これらのソリューションが使用するにはコアすぎる場合は、代わりに小さなファイルを使用することを検討してください (既存のファイルを分割します)。

于 2013-03-13T15:10:15.820 に答える