Недавно я заново открыл замечательную статью Рэндала Шварца , которая включает в себя предварительное распределение массива. Предполагая, что это ваша проблема, вы можете протестировать предварительное распределение с помощью этого кода. Но обязательно проверьте результат.
Причина, по которой скрипт замедляется при увеличении объема кэширования, может быть thrashing . Предположительно, причина кеширования в первую очередь заключается в повышении производительности. Итак, быстрый ответ: уменьшить кеширование.
Теперь могут быть способы изменить схему кэширования, чтобы она использовала меньше основной памяти и избегала перегрузки. Например, вы можете обнаружить, что кэширование в файл или базу данных, а не в память может повысить производительность. Я обнаружил, что кэширование файловой системы и базы данных может быть более эффективным, чем кэширование приложений, и может использоваться несколькими экземплярами.
Другая идея может состоять в том, чтобы изменить ваш алгоритм, чтобы уменьшить использование памяти в других областях. Например, вместо того, чтобы вытягивать весь файл в память, программы на Perl лучше работают построчно.
Наконец, вы изучили модуль Memoize ? Возможно, это не сразу применимо, но это может быть источником идей.