2

私は巨大なテキストファイル(最大5GBのサイズ)を読み込むアプリケーションに取り組んでいます。現在、fscanfを使用してファイルを読み込んでいます。これは、これまでのところ最速であることがわかったためです。ただし、ファイル全体を読み込むには、まだかなりの時間がかかります。

ファイルからデータを読み込むより速い方法はありますか?

4

1 に答える 1

2

まず、5GBのファイルを1つのステップとしてメモリに読み込むことは強く避けてください。メモリへの影響だけで、このアプローチから離れることができます。代わりに、次のような別のアプローチを取るようにしてください。

  • データを読みながら処理し、データを破棄します
  • 作業前にファイルをCoreDataモデルに変換する
  • ファイルを固定長のレコード形式に変換して、ランダムアクセスを実行できるようにします
  • 冗長性が少なくなるようにファイル形式を変更します
  • ランダムアクセスを実行できるように、ファイルにインデックスを付けます
  • データを別々のファイルに分割する
  • NSFileWrapper(万能薬からはほど遠いですが、上記と組み合わせて使用​​すると便利です。NSFileWrapperメモリマッピングを自動的に実行します)を使用してファイルをメモリマップします。

パフォーマンスベースラインを取得することから始める必要があります。

time cat thebigfile.dat > /dev/null

それよりもはるかに速くファイルを読み取ることは想像しがたいので、それがあなたのフロアです。

Instrumentsでパフォーマンス分析を確実に実行し、問題が処理ではなく読み取りにあることを確認する必要があります。特に、メモリ割り当ては、特にマルチスレッドアプリでは、予想よりもコストがかかる可能性があります。

上記を調査し、ディスク上のデータを非常に高速に管理する必要がある場合は、dispatch_iodispatch_dataを確認してください。これは、高速データ管理のための本当に素晴らしいツールです。ただし、ほとんどの場合、この種の最適化について心配する前に、最初に基本的なアルゴリズムを改善することをお勧めします。

于 2012-07-30T16:31:39.353 に答える