2012-02-17 3 views
2

私はC++で書かれたアプリケーションを持っていますが、Visual Studio 2005はWindows XP専用です。 アプリケーションを起動すると、XMLを含むテキストファイル(.nfo)が大量(> 20000)読み込まれます。 各ファイルは800バイトです。Windows XPは起動時にC++でテキストファイルを読み込むのが遅くなります。プリフェッチ?

コールドリブート後にアプリケーションを起動すると、ファイルを読み取るのに10分かかります。 しかし、私がそれを閉じて再起動すると、それを読むのに10秒しかかかりません。ウォームリブートをすると10秒かかります。 キャッシュ・ユーティリティーを使用してキャッシュをクリアすると、ファイルの読み取りにも10秒かかります。 コンピュータをコールドリブートする場合は、2時間コンピュータに触れずにアプリケーションを起動しても、起動には10分かかります。

私は標準ライブラリ(std)の基本機能を使用してファイルを開いたり、読み込んだり閉じたりします。

私は、この問題はアプリケーションの実装から直接ではなく、Windows XPから発生すると考えています。

私の現在の焦点はWindows XPのプリフェッチャです。私のアプリケーションはプリフェッチディレクトリにある.pfファイルを持っています。 しかし、私の.nfoテキストファイルは、プリフェッチするファイルのリストにありません。 たとえば、Internet Explorerに関連付けられたプリフェッチファイルでは、ピクチャなどの一時ファイルがプリフェッチファイルにリストされていることがわかります。 ファイルをそのリストに表示させることができれば、私は信じています。 Windowsですでにディスク上のどこにあるかを知っているので、それらのオープン/読み取り操作は速くなります。

なぜ私のファイルは.pfプリフェッチファイルの中に私のDLLと一緒に置かれていませんか? ファイルがプリフェッチファイルに表示される条件は何ですか?

これは意味がありますか?

また、Windows XPに完全なディレクトリまたはファイルの一覧をプリフェッチさせる方法があるのだろうかと思いましたか?

これはすでに市販されている製品で、コンピュータで販売されています。したがって、我々はOSを調整する完全なアクセス権を持っています。 しかし、私たちはアプリケーションに対して極端な変更を行う予定はありません。

よろしく

+0

アプリケーションはどのように起動されていますか?手動で実行しているのですか、またはスタートアップグループ、レジストリなどの一部ですか? OSのバージョンはわかりませんが、スタートアップ時間を助けるための "サンドボックス"スタートアッププログラムは、多くのベンダーが自分のプログラムを同時に開始したいからです。 –

+0

通常、ユーザーが手動でアプリケーションを起動します。私たちは自動起動に取り組んでいますが、どうすればそれが助けられるのかわかりません。 – philouuuu

+0

stdからの基本機能によって、あなたはifstreamオブジェクトを意味しますか?プレーンCの関数は、大量のテキストを処理するときにはるかに優れたパフォーマンスを持つと思われます。 – Raven

答えて

4

起動時に> 20000個のファイルを読んでいる場合はIMO、それは間違いなくアプリケーションとの問題です。
なぜ実際に自分のアプリケーションを修正するためにOSを調整するのが好きではないのですか?それは> 20000個のファイル用の10分を要する場合は、標準のC++ファイルルーチンを使用している場合は特に

、あなたは、回転ディスクのためのそれほど悪くはないファイルあたり< 30ミリ、見ています、かなりのオーバーヘッドを持つIIRCです。

ファイルがすでにシステムディスクキャッシュに入っているため、10秒(ファイルあたり0.5ミリ秒)かかる場合。

プリフェッチを行っても、魔法のように速く動作するわけではありません。 OSは依然として、20000個のファイルを検索、オープン、読み取り、クローズする必要があります。になります。

ロード時間を改善する最も良い方法は、ファイルをまとめてバンドルして一度に読み込むことです。
効率を最大にするには、圧縮されたアーカイブに貼り付けます。
またはSSDを使用してください。

関連する問題