在反应式扩展的 System.Interactive.dll (v1.0.2521.0) 中,EnumerableEx
都有一个Memoize
方法和一个MemoizeAll
方法。两者的 API 文档是相同的:
创建一个仅枚举原始可枚举一次并缓存其结果的可枚举。
然而,这些方法显然并不相同。如果我使用Memoize
,我的枚举在第一次枚举时有值,第二次似乎为空。如果我使用MemoizeAll
然后我从任一方法的描述中得到我期望的行为 - 我可以根据需要多次枚举结果,并且每次都得到相同的结果,但源仅枚举一次。
谁能告诉我这些方法之间的预期区别是什么?用途是什么Memoize
?这似乎是一种相当无用的方法,而且文档确实令人困惑。
简而言之,MemoizeAll
仅缓存您实际使用的项目 - 但它会永远保留所有缓存的项目。Memoize
立即缓存项目,但最多只能达到指定的缓冲区大小。这可以让您在内存使用等方面更加高效,但只有当您了解可枚举源的所有使用者将如何使用它时,您才想使用后者。
这篇博文对差异做了很好的解释:http://bartdesmet.net/blogs/bart/archive/2010/01/07/more-linq-with-system-interactive-function-fun-and-taming-side-effects.aspx http://bartdesmet.net/blogs/bart/archive/2010/01/07/more-linq-with-system-interactive-functional-fun-and-taming-side-effects.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)