私は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を調整する完全なアクセス権を持っています。 しかし、私たちはアプリケーションに対して極端な変更を行う予定はありません。
よろしく
アプリケーションはどのように起動されていますか?手動で実行しているのですか、またはスタートアップグループ、レジストリなどの一部ですか? OSのバージョンはわかりませんが、スタートアップ時間を助けるための "サンドボックス"スタートアッププログラムは、多くのベンダーが自分のプログラムを同時に開始したいからです。 –
通常、ユーザーが手動でアプリケーションを起動します。私たちは自動起動に取り組んでいますが、どうすればそれが助けられるのかわかりません。 – philouuuu
stdからの基本機能によって、あなたはifstreamオブジェクトを意味しますか?プレーンCの関数は、大量のテキストを処理するときにはるかに優れたパフォーマンスを持つと思われます。 – Raven