gpt4 book ai didi

c# - System.Interactive:Memoize() 和 MemoizeAll() 之间的区别?

转载 作者:太空狗 更新时间:2023-10-29 20:22:26 26 4
gpt4 key购买 nike

在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com