2016-08-05 42 views
0

所以我正在做很长时间的模拟,基本上使用C++。我有几个有很多成员的类和几个需要完成和重做的操作。有很多简单的任务需要几次完成。
对于大型计算,我计算了一次并将其保存为成员。但是对于简单的计算,如加减其他成员,计算成员数组的等级等,我很困惑,如果将它们保存起来也是提高性能的明智决定。
对于这种简单的任务,计算每次需要的计算速度会更快,还是将计算结果保存为新成员并在需要时进行检索。保存所有简单计算或每次执行结果都是必需的?

我有许多这些简单的重复计算,所以这可以使代码真的很乏味,把所有的getter,setters。

+2

像大多数其他一样,这取决于。你多久会进行一次“小”计算?涉及的价值多久改变一次?你有没有试图衡量这两种尝试? –

+5

只有一种方法可以知道:措施。一般而言,缓存某些东西是否会成为一场净胜是无法回答的。 – Mat

+1

如果您的目标是提高性能,您需要进行多项测试才能找到瓶颈,并检查您的案例中哪种方法更好。 – Ilya

回答

1

记忆不是那么单调乏味。你可以很容易地得到它像这样:

template <class OUT,class IN> 
OUT calc(const IN& x){ 

    // (small) overhead for memoization 
    static std::map<IN,OUT> memo; 
    std::map<IN,OUT>::iterator found = memo.find(x); 
    if (found != memo.end()){ return found->second; } 

    // (possibly expensive) calculation 
    double result = doTheCalculation(x); // the actual calculation 
    memo[x] = result; 
    return result; 

} 

当你这样做是一个聪明的办法,你甚至不得不写备忘录的代码要使用它,但简单地重用它的多种功能每个功能。是否值得这样做完全取决于你的应用程序,唯一的办法就是测量它。

请注意,通过将mapunordered_map重新连接,以上可能会更有效。

相关问题