Под «неизменяемой функцией» или «неизменяемым методом» я подразумеваю функцию, результат которой никогда не изменится, если вы дадите ей одинаковые аргументы.
Мне было бы интересно узнать, знает ли кто-нибудь более общее или менее подробное решение, когда вы хотите кэшировать предварительно вычисленные значения неизменяемой функции.
Позвольте мне объяснить, что я имею в виду, на простом примере:
//Let's assume that ComputeStuff() returns a widely used value
//and that
//1. It is immutable (it will always return the same result)
//2. its performance is critical, and it cannot be accepted to compute
// the result at each call, because the computation is too slow
//I show here a way to solve the problem, based on a cached result.
//(this example works in a case of a method with no arguments.
// A hash would be required in order to store multiple precomputed results
//depending upon the arguments)
private string mComputeStuff_Cached = null;
public string ComputeStuff()
{
if (mComputeStuff_Cached != null)
return mComputeStuff_Cached ;
string result;
//
// ...
//Do lots of cpu intensive computation in order to compute "result"
//or whatever you want to compute
//(for example the hash of a long file)
//...
//
mComputeStuff_Cached = result;
return mComputeStuff_Cached ;
}
Примечания:
- Я добавил тег C ++, так как решение в C ++ меня также заинтересовало
- Понятие «неизменяемые функции» является общим для разработчиков баз данных, поскольку функцию можно определить как «неизменяемую» или «неизменяемую в транзакции» (это хороший способ повысить производительность запросов).
Заранее спасибо