フォルダを入力として受け取り、その中の画像を処理するプログラムがあります。
初めてプログラムを実行すると、1秒間に約5枚の画像が処理されます。
2回目の実行では、1秒間に20枚の画像を処理します。
その後の実行では、1秒間に約50枚の画像を処理します。
これは間違いなくキャッシュと関係があることを理解しています。
私の質問は、最初の反復でプログラムをすばやく実行するにはどうすればよいですか?
クライアントはプログラムを1日1回だけ実行する必要があるため、これは私にとって非常に重要です。したがって、最初の実行では高速である必要があります。
アップデート1:これはWindowsベースのアプリケーションです。
ありがとう。
ここでのボトルネックは、ディスク上のデータにアクセスする速度です。
実行する画像処理の種類によっては、(より優れた/より高速なライブラリまたは最適化を使用して)速度を上げることができます。これにより、連続する各実行で処理される画像の数が多くなります。
あなたが持っていた場合(画像/秒)
20、30、50、50、50
その後、
21、32、53、53、53
または
30、45、75、75、75
ロードと比較して処理にかかる時間によって異なります。プロファイラーまたは単純なメジャーのロード/処理時間を使用して、最大で何を獲得できるかをよりよく理解できます(理論的には処理時間がゼロに短縮されます)。
あなたが作ろうとしているなら
50、50、50、50、50
次に、画像をロードする時間が必要であり、この時間を費やす必要があるため、ソフトウェアでは不可能です。キャッシュを使用して何かを事前にキャッシュしようとしても、プログラムの合計実行時間は最初の実行で同じであり、2回目に実行した場合(キャッシュが既に発生している場合)はまだ残っているため、何も勝ちません。平均(合計実行時間/合計画像)
20、30、50、50、50
SSDを使用している場合でも、メモリ(Windowsディスクキャッシュ)の方が高速であるため、初回実行時の速度は遅くなります。それでもより高速なディスク(SSD RAID?= D)を使用すると、ロード速度が大幅に向上します(現在、通常のHDDを使用していると仮定します)が、処理時間は同じです。
プログラムをより速く実行したいのはなぜですか?おそらく、手動で実行する必要があるか、そうでなければユーザーがWindowsやその他のソフトウェアを使用できないようにする必要があるためですか?それでは、ユーザーの邪魔にならないように、この処理を非常に低速でバックグラウンドで行うのはどうでしょうか。Windowsと一緒に起動し、他のソフトウェアでIPCを使用して(またはその一部でさえ)、いつ/何を/どのように処理するかを決定できます。良い例として、ヒューリスティックがたくさんある(つまり処理時間が長い)非常に優れたアンチウイルスを取り上げます。すべてをスキャンするために毎日実行する必要はありません(時間がかかり、非常に集中的です)が、実行する場合バックグラウンドでは、スケジュールされた時間(PCの使用量が少ない場合)に毎週/毎月のスキャンで必要なジョブのみを実行するので、まったく問題ありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加