あなたのプログラムは、そのボトルネックと同じくらい高速です。全体的なパフォーマンスが向上する場合は、データをメモリに保存するなどのことを行うことは理にかなっています。ただし、パフォーマンスが向上するという厳密なルールはありません。1 つのボトルネックを修正すると、新しい何かがボトルネックになります。したがって、1 つの問題を解決すると、次のボトルネックが何であるかに応じて、パフォーマンスが 1% または 1000% 向上する可能性があります。あなたが改善しているものは、まだボトルネックかもしれません。
これらのことは、一般的に次の 3 つのレベルのいずれかに当てはまると考えています。
- 熱心。ディスクやネットワーク、または計算結果から何かが必要な場合は、行って取得または実行します。これはプログラムが最も簡単で、テストとデバッグが最も簡単ですが、パフォーマンスは最悪です。この側面がボトルネックでない限り、これは問題ありません。
- 怠惰。特定の読み取りまたは計算を実行したら、数ミリ秒から永遠に続く可能性のある一定期間、それを再度実行しないでください。これにより、プログラムが非常に複雑になる可能性がありますが、読み取りや計算にコストがかかる場合は、多大なメリットが得られます。と
- 熱心すぎる。これは、前の 2 つの組み合わせによく似ています。結果はキャッシュされますが、読み取り、計算、または要求を行う代わりに、必要なものを予測するためのある程度のプリエンプティブ アクティビティがあります。ファイルから 10K を読み取る場合と同様に、後で次の 10K ブロックが必要になる可能性がかなり高くなります。実行を遅らせるのではなく、要求された場合に備えて取得します。
ここから得られる教訓は、Donald Knuth の「時期尚早の最適化は諸悪の根源である」という (やや乱用され、しばしば誤って引用されている) 引用です。熱心な解決策や過度に熱心な解決策は、膨大な量の複雑さを追加するため、有用な利益をもたらさない何かのためにそれらを行う意味はありません.
プログラマーは、何かの高度に (主張されている) 最適化されたバージョンを作成する必要があるかどうか、およびそれが役立つかどうかを判断する前に、よく間違いを犯します。
私自身の見解は次のとおりです。問題が発生するまで問題を解決しないでください。