Ваша программа работает так же быстро, как и ее узкое место. Имеет смысл делать такие вещи, как хранение ваших данных в памяти, если это улучшает общую производительность. Однако не существует жесткого и быстрого правила, которое говорит, что оно улучшит производительность. Когда вы устраняете одно узкое место, узким местом становится что-то новое. Таким образом, решение одной проблемы может привести к увеличению производительности на 1% или на 1000% в зависимости от следующего узкого места. То, что вы улучшаете, все еще может быть узким местом.
Я думаю, что эти вещи обычно вписываются в один из трех уровней:
- Стремление. Когда вам нужно что-то с диска или из сети или результат расчета, вы идете и получаете или делаете это. Это самая простая программа, самая простая для тестирования и отладки, но худшая для производительности. Это хорошо, если этот аспект не является узким местом;
- Ленивый. После того, как вы сделали определенное чтение или вычисление, не делайте это снова в течение некоторого периода времени, который может быть от нескольких миллисекунд до бесконечности. Это может значительно усложнить вашу программу, но если чтение или расчет дорог, может принести огромные преимущества; и
- Слишком рвение. Это очень похоже на комбинацию двух предыдущих. Результаты кэшируются, но вместо чтения или вычисления или запроса существует определенное количество упреждающих действий, чтобы предвидеть то, что вы могли бы хотеть. Например, если вы читаете 10К из файла, существует достаточно высокая вероятность того, что вам может понадобиться следующий блок 10К. Вместо того, чтобы откладывать выполнение, вы получаете его на тот случай, если его попросят.
Урок, который можно извлечь из этого, - цитата Дональда Кнута (несколько чрезмерно используемая и часто ошибочно цитируемая) о том, что «преждевременная оптимизация - корень всего зла». Решительные и чрезмерные решения создают огромную сложность, поэтому нет смысла делать их ради чего-то, что не принесет полезной выгоды.
Программисты часто совершают ошибку, создавая какую-то (предположительно) оптимизированную версию чего-либо, прежде чем определить, нужно ли это и будет ли это полезно.
Мое собственное мнение таково: не решайте проблему, пока у вас не возникнет проблема.