使用元组的快速记忆

问题描述 投票:2回答:1

我想使用备忘录来加快类似于以下代码的速度(曾经调用过少量可能的参数值:]

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 = .. 。

c# tuples memoization
1个回答
0
投票

您可以改用ValueTuple。同样,记住获得计算值后要更新缓存:

© www.soinside.com 2019 - 2024. All rights reserved.