• ベストアンサー

メモリマップドファイルを使って高速化できるか

現在、テキストファイルの読込みを関数(fopen(),fgets(),fclose()) を使って処理しています。 今回、処理を高速するためメモリマップドファイルの使用を検討しています。 そこで質問なのですが、 メモリマップドファイルを使うと劇的な高速化が期待できるのですか? 高速化する場合、どういったタイプのファイルに有効なのですか? 自分で調べろと言われそうですが、ご勘弁ください。 使ったことのある方、また、実際に比較してみたことのある方が いましたら教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

高速化は出来ません。 メモリマップドファイルとは、そのファイルを、「あたかもメモリ上に存在しているかのように扱う手法」であって、実際にメモリ上に読み込まれる訳ではありませんから。 高速化したいのであれば、ファイルを丸ごと物理メモリ上に読み込んで処理をさせる必要があるかと思います。 ただし、ファイルが、空きメモリサイズを超えてしまうと、エラーで落ちたり、スワップが頻発して逆に遅くなる可能性もあります。

ken2r
質問者

お礼

ご回答有難うございました

その他の回答 (2)

  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

処理内容によります。 テキストファイルでfopen(),fgets(),fclose()で事足りているのであれば、処理速度は変わらないと思います。改行の処理やメモリの使い方などで効率の悪いコードを書いていると、遅くなることもありえます。 バイナリファイルでシークを多用したりする場合には少々高速化することはありえますが、 通常は「劇的」な高速化までは期待できないでしょう。

ken2r
質問者

お礼

ご回答有難うございました。

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

>メモリマップドファイルを使うと劇的な高速化が期待できるのですか? 劇的な高速化はありません。 そもそも、処理の高速化を期待して使うものではありません。 少なくともテキストファイルのようにシーケンシャルに読み書きするものであれば、意味がありません。 ファイルにランダムにアクセスする際、普通はlseekしてread/writeするわけですが、メモリマップドファイルにすると、ファイルのアクセスがメモリのようにポインタで直接アクセスできたりするのがメリットです。

ken2r
質問者

お礼

ご回答有難うございました。

関連するQ&A