質問

私はC++のプログラムを読み込みファイルからのハードディスクは一部加工のデータのファイルです。を使用してい標準Win32Apiのファイルです。私の問題は、このプログラムはblazingly高速一回、急減速1/6前高速になります。がんと同じファイルも複数の運転、その後通常は最初の実行の遅いです。そのまま維持することに速まで読んだその他の設定ファイルです。このような中、私は明らかったのプロフィールのディスクアクセス。使用したperfmon光を測定しのIOバイトを読み込む/secのための私のプログラム。として期待が大きな違いが(~5倍のバイト数を読み込みます。私の質問:

(1).なOS(Windowsの場合)キャッシュに最近、ファイルのどこかでこれらの負荷が早い?

(2).することができるという保証しているため、すべてのファイルを読み込みまに居住し、同じディレクトリを、本当にありがとうまされているハードディスクできるようにディスクアクセス時間が早い?

ってどうにかなるものなんですか。

他のヒント

ご番の問いと答えています。だからだ改善のためにできることをハードドライブを読み取り速度が、ここはヒント:

  • 読みOSの機能(例えば、 ReadFile することにより、ラッパーの図のように iostreams または stdio が可能です。多くのラッパーを紹介するバッファリング.
  • 順次読みして、Windowsなとみらいを読み解くの順に、 FILE_FLAG_SEQUENTIAL_SCAN フラグ。
  • いように読めない書)のファイルを閲覧することができます。
  • 読み込み可欠なバイト文字です。
  • 理想的には、チャンクは複数のディスクのクラスターサイズです。
  • から読み込むディスククラスタ-イオフセットなのです。
  • 読み込みメモリのページ。れば配分に大きなチャンクでしょうページが揃います。)
  • 先端:場合を開始することができ計算後だけの読み込みの開始ファイル、そのまま使用を重ねI/Oてみてはい並列化の計算とその後の読み込みています。

はい、Windowsの(そして最も近代的なOSのの)そのファイルデータが近い将来に再び要求された場合、それはすでにRAMとディスクアクセスで利用できるようになりますように、それ以外の場合は、未使用のRAMで最近読んファイルのデータを保存を回避することができます。

限り高速なディスクアクセスを行うなど、あなたのドライブのデフラグ試みることができるが、私はそれがあまりにも多くのを助けることを期待していません。アクセスをドライブすることは、単にRAMキャッシュは、このような素敵な高速化を提供する理由であるRAMへのアクセスに比べて遅くなります。

診断テストとして、あなたは正確に、それは非常に最初の時間をロードするのにかかる時間を測定することができますか?

そして、転送速度を決定することを取ります。そして、あなたはその転送速度を取り、 HDのチューンを実行するときに何を得るにそれを比較することができます。何が価値があるために、私はこれを自分で走っ44.2 MB / sの最小値は、87メガバイト/ sの平均は、110メガバイト/ sの最大は私のWestern DigitalのRE3ドライブ(SATAが利用可能なドライブに高速7200 RPMの1)と速度を読みました。

このすべてのポイントは、独自のアプリケーションは、それができる最善をやっているかどうかを確認することです。言い換えれば、さておき、あなたが本当に任意の速いハードドライブが可能であるものよりもファイルを読み取ることができませんキャッシュから。あなたがその限界に達しているのであれば、次に行うにはより多くの何もない。

また、あなたがテスト中にメモリが不足していないことを確認してください。パフォーマンスモニタを実行し、あなたが読んでいる物理ドライブ用メモリ>使用可能なバイト数とのPhysicalDisk>ディスク読み取りバイト数/秒を監視します。監視プロセスは、I / Oは、あまりにも良いアイデアです。 (ネットワークを含む)、後者は、すべてのI / Oを組み合わせたことを覚えておいてください。

シーケンシャルは、単一の平均SATAドライブからの読み込みのために

あなたは50メガバイト/秒を期待するべきです。良いストライプシリアルSCSIドライブのカップルはあなたに約220 MB /秒を与えます。あなたが使用可能なメモリがゼロ近くまで行くの見ている場合、それはあなたの問題だろう。あなたはそれがあなたのアプリとは何かを持っているよりも、読みの最初のラウンドをした後、それはフラットのままの場合ます。

scroll top