我想使用备忘录来加快类似于以下代码的速度(曾经调用过少量可能的参数值:]
double MyFun(double a,double b,int c,char d)
{
double a = cpu_intensive_pure_function_1(a,c,d);
double b = cpu_intensive_pure_function_2(b,c,d);
return a+b;
}
一种可能是将args包装到一个Tuple对象中并使用Dictionary(新版本的Dotnet为您完成了tuple的哈希处理)] >>
Dictionary<Tuple<double,double,int,char>,double> MyFunCache = new Dictionary<Tuple<double,double,int,char>,double> (); double MyFun(double a,double b,int c,char d) { var tmp = Tuple<double,double,int,char>(a,b,c,d); if(MyFunCache.ContainsKey(tmp)) { return MyFunCache[tmp]; } double a = cpu_intensive_pure_function_1(a,c,d); double b = cpu_intensive_pure_function_2(b,c,d); return a+b; }
但是这每次调用函数时都需要创建一个Tuple对象,这看起来很浪费,难道没有更好的方法吗?已经有争论了吗?
我想使用备忘录来加速类似于以下代码的代码(只调用了少量可能的参数值):double MyFun(double a,double b,int c,char d){double a = .. 。
您可以改用ValueTuple
。同样,记住获得计算值后要更新缓存: