業績の課題をハードディスクの読み取り
-
18-09-2019 - |
質問
私はC++のプログラムを読み込みファイルからのハードディスクは一部加工のデータのファイルです。を使用してい標準Win32Apiのファイルです。私の問題は、このプログラムはblazingly高速一回、急減速1/6前高速になります。がんと同じファイルも複数の運転、その後通常は最初の実行の遅いです。そのまま維持することに速まで読んだその他の設定ファイルです。このような中、私は明らかったのプロフィールのディスクアクセス。使用したperfmon光を測定しのIOバイトを読み込む/secのための私のプログラム。として期待が大きな違いが(~5倍のバイト数を読み込みます。私の質問:
(1).なOS(Windowsの場合)キャッシュに最近、ファイルのどこかでこれらの負荷が早い?
(2).することができるという保証しているため、すべてのファイルを読み込みまに居住し、同じディレクトリを、本当にありがとうまされているハードディスクできるようにディスクアクセス時間が早い?
ってどうにかなるものなんですか。
解決
1)Windowsがないキャッシュは、最近メモリ内のファイルを読み込みます。これがどのように動作するかの優れた記述が含まれてにWindowsの内部rel="noreferrer">ブックの
2)ディレクトリは、実際にディスク上のレイアウトに影響を与えません。一緒にあなたのドライブの意志グループファイルのデータの断片化を解消。アップ上のWindows Vistaは自動的にディスクを最適化します。理想的には、大規模な順次読み取りを行うと、あなたの書き込みを最小限にしたいです。小さなランダムアクセスとインタリーブ性能が痛い大幅読み込みと書き込み。あなたのディスクアクセスをプロファイルする
他のヒント
ご番の問いと答えています。だからだ改善のためにできることをハードドライブを読み取り速度が、ここはヒント:
- 読み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 /秒を与えます。あなたが使用可能なメモリがゼロ近くまで行くの見ている場合、それはあなたの問題だろう。あなたはそれがあなたのアプリとは何かを持っているよりも、読みの最初のラウンドをした後、それはフラットのままの場合ます。
デフラグするために使用することができのコンティグと呼ばれるマイクロソフトのユーティリティ新しい断片化されていないファイルを作成するために、単一のディスク上のファイルまたはます。
狂気の答えのために、あなたが最速の部分にあなたの情報を配置するように、ドライブをフォーマットしてみてください、と見ることができます。