TransformManyBlock,将返回空的IEnumerables需要被显式处理,以便不将它们保留在内存中?

时间:2013-02-15 08:53:46

标签: c# task-parallel-library tpl-dataflow

我实现了一个TransformManyBlock<Tin,Tout>,我想知道当我在块中返回一个空IEnumerable时,空IEnumerable会保留在系统中的任何位置,还是会被垃圾收集或丢弃我?显然,如果我改为使用IEnumerable,我需要处理这样的TransformBlock,但我想知道这是否已由TransformManyBlock的库处理。

我想我想知道的是TPL是否会为我处理那个空的IEnumerable,或者我是否需要自己处理它。

1 个答案:

答案 0 :(得分:2)

IEnumerable<T>没有实现IDisposable,大多数(如果不是全部)IEnumerable<T>的标准实现也不会实现IDisposable。因此,如果您实际返回需要处理的集合实例,则TPL不会为您处置它。
但是如果你想要返回一个空的可枚举,那真的不应该这样,因为在这种情况下你可以返回Enumerable.Empty<T>()new T[0]

实际上,我认为你很困惑&#34;处理&#34;和&#34;垃圾收集&#34;。
只要没有更多的引用指向它,就可以使用空的枚举进行垃圾收集。

所以,总结一下:你不必担心,除非你想要返回一个非常奇特的可枚举实现。