- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 Reactive Extensions 的 System.Interactive.dll (v1.0.2521.0) 中,EnumerableEx
有一个 Memoize
方法和一个 MemoizeAll
方法。它们的 API 文档是相同的:
Creates an enumerable that enumerates the original enumerable only once and caches its results.
但是,这些方法显然并不相同。如果我使用 Memoize
,我的可枚举值在我第一次枚举它时就有值,而第二次似乎是空的。如果我使用 MemoizeAll
那么我会从任何一种方法的描述中得到我期望的行为 - 我可以根据需要多次枚举结果并且每次都得到相同的结果,但来源只是枚举一次。
谁能告诉我这些方法之间的预期区别是什么? Memoize
的用例是什么?这似乎是一个相当无用的方法,文档非常困惑。
最佳答案
简而言之,MemoizeAll
只缓存您实际使用的项目——但它会永远保留所有缓存的项目。 Memoize
立即缓存项目,但最多只能达到指定的缓冲区大小。这可以让您在内存使用等方面更有效率,但如果您了解可枚举源的所有使用者将如何使用它,您只想使用后者。
这篇博文中对差异有一个非常好的解释: http://bartdesmet.net/blogs/bart/archive/2010/01/07/more-linq-with-system-interactive-functional-fun-and-taming-side-effects.aspx
关于c# - System.Interactive:Memoize() 和 MemoizeAll() 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2931582/
在 Reactive Extensions 的 System.Interactive.dll (v1.0.2521.0) 中,EnumerableEx 有一个 Memoize 方法和一个 Memoiz
我是一名优秀的程序员,十分优秀!