c# - 哪些语言支持没有样板代码的返回值缓存?

标签 c# java performance language-agnostic caching

对于...的方法

  • 在输入和输出之间存在静态的一对一映射,并且
  • 创建输出对象的成本相对较高,并且
  • 使用相同的输入重复调用该方法

...需要缓存结果值。

在我的代码中,以下结果值缓存模式重复了很多次(Java 中的伪代码,但问题与语言无关):

private static Map<Input, Output> fooResultMap = new HashMap<Input, Output>();
public getFoo(Input input) {
  if (fooResultMap.get(input) != null) {
    return fooResultMap.get(input);
  }
  Output output = null;
  // Some code to obtain the object since we don't have it in the cache.
  fooResultMap.put(input, output);
  return output;
}

一直重复这种结构显然违反了 DRY 原则。

理想情况下,我希望将上面的代码简化为以下代码:

@CacheResult
public getFoo(Input input) {
  Output output = null;
  // Some code to obtain the object since we don't have it in the cache.
  return output;
}

理论上的 CacheResult 注释会处理我目前正在手动执行的缓存。

此类缓存的通用术语是“memoization”。

我正在寻找的确切功能的一个很好的例子是 Perl core module "Memoize" .

这种类似 Memoize 的缓存解决方案存在于哪些语言中(在语言级别或库级别)?特别是 - 是否存在适用于 Java 或 .NET 等任何主要平台的此类解决方案?

最佳答案

不是内置语言,放CPAN模块Memoize在 Perl 领域相当流行,我认为:

   # Compute Fibonacci numbers
    sub fib {
      my $n = shift;
      return $n if $n < 2;
      fib($n-1) + fib($n-2);
    }

    use Memoize;
    memoize('fib');

关于c# - 哪些语言支持没有样板代码的返回值缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/892371/

相关文章:

c++ - 过度使用宏会影响性能吗?

performance - 多重连接 LINQ 查询性能

c# - C# 中的 SQL Server spy

c# - 判断当前时间是否在多个时间跨度之间

c# - 在 C# 中访问 PowerPoint 图表

c# - 如何使用 C# 互操作对 excel 中的列重新排序

Java,如何在远程主机中创建新目录。

HTML5 视频 - 为用户提供播放速度选项

java - 从 MySQL 加载数据库表

java - 如何将默认字符串放入Jtextpane并使其在java中不可编辑