代码之家  ›  专栏  ›  技术社区  ›  Joel Mueller

interactive:memoize()和memoizeral()的区别?

  •  7
  • Joel Mueller  · 技术社区  · 14 年前

    在被动扩展的system.interactive.dll(v1.0.2521.0)中, EnumerableEx 都有 Memoize 方法与A MemoizeAll 方法。API文档对于这两个文档都是相同的:

    创建只枚举原始可枚举一次并缓存其结果的可枚举项。

    然而,这些方法显然不相同。如果我使用 回忆录 ,我的Enumerable在第一次枚举它时就具有值,第二次似乎是空的。如果我使用 备忘录 然后,我从任何一种方法的描述中得到我期望的行为——我可以尽可能多次地枚举结果,每次都得到相同的结果,但是源只被枚举一次。

    有人能告诉我这些方法的预期区别是什么吗?用例是用来做什么的 回忆录 ?这似乎是一个非常无用的方法,文档非常混乱。

    1 回复  |  直到 14 年前
        1
  •  7
  •   Warren Rumak    14 年前

    简单地说, MemoizeAll 只缓存您实际使用的项——但它永远保存所有缓存项。 Memoize 立即缓存项,但最多只能缓存指定的缓冲区大小。这使您在内存使用等方面效率更高,但是您只想在理解可枚举源的所有使用者将如何使用它的情况下使用后者。

    对于这篇博文的不同之处,有一个很好的解释: http://bartdesmet.net/blogs/bart/archive/2010/01/07/more-linq-with-system-interactive-functional-fun-and-taming-side-effects.aspx