3

オプション: 1. ファイル全体を 1 つの巨大なバッファーに読み込み、後で解析します。2. ファイルを仮想メモリにマッピングします。3. ファイルをチャンクで読み取り、1 つずつ解析します。

ファイルには非常に任意のデータを含めることができますが、ほとんどの場合、特定の方法 (コンマ、角かっこ、引用符など) でフォーマットされた数値、値、文字列などです。全体的なパフォーマンスが最大になるのはどのオプションですか?

4

3 に答える 3

2

ファイルが非常に大きい場合は、オプション 2 または 3 で複数のスレッドを使用することを検討してください。各スレッドはファイル/メモリの単一のチャンクを処理でき、この方法で IO と計算 (解析) をオーバーラップできます。

于 2013-03-18T23:49:08.603 に答える
0

ファイル全体を一度に読み取ってから、テキストからバイナリデータに変換することは意味がありません。書き込む方が便利ですが、メモリが不足する速度が速くなります。私はテキストをチャンクで読み、あなたが行くにつれて変換します。変換されたデータは、テキストではなくバイナリ形式であるため、とにかく元のソーステキストよりも占有するスペースが少なくなる可能性があります。

于 2013-03-19T00:15:45.540 に答える
0

「正しい」戦略の選択は、読み取っているデータの構成に大きく依存するため、質問に一般的な答えを出すのは困難です。

特に、処理するデータが非常に膨大な場合は、オプション 1. と 2. は機能しません。使用可能なメイン メモリの量が、このような試みの上限になるからです。

おそらく、処理しようとしているデータを (再) 構造化することによって、効率の面で最大の利点を達成できます。

チャンク全体を不必要に処理することを避ける方法でデータを整理する機会があるかどうかを確認することは、質問で言及されている問題に対処する前に改善しようとする主な場所です。

効率の点では、言及された方法のいずれかを選択することで常に勝つことができますが、一方で、データを適切に編成することではるかに優れた改善が得られる可能性があります. データが大きければ大きいほど、意思決定の重要性が増します。

考慮に入れるのに十分興味深いと思われるデータに関するいくつかの事実には、次のものがあります。

  • 処理するデータに規則的なパターンはありますか?
  • データはほとんど静的ですか、それとも非常に動的ですか?
  • 順次解析する必要がありますか、それともデータを並列処理できますか?
于 2013-03-19T00:00:12.507 に答える