1

を実装しましたが、ブロック内でTransformManyBlock<Tin,Tout>空を返すと、その空はシステムのどこにでも保持されるのでしょうか、それともガベージコレクションまたは破棄されるのでしょうか? 代わりに a を使用した場合、明らかに自分でそのような処理を行う必要がありますが、これが のライブラリによって既に処理されているかどうかは疑問です。IEnumerableIEnumerableIEnumerableTransformBlockTransformManyBlock

私が知りたいのは、TPL がその空の IEnumerable の破棄を処理するのか、それとも自分で処理する必要があるのか​​ということです。

4

1 に答える 1

2

IEnumerable<T>は実装されておらずIDisposable、ほとんどの (すべてではないにしても) の標準実装もIEnumerable<T>実装されていませんIDisposable。したがって、処分が必要なコレクションのインスタンスを実際に返す場合、TPL はそれを処分しません。
しかし、空の列挙型を返したい場合は、そうではありません。その場合、Enumerable.Empty<T>()orを返すことができるからnew T[0]です。

実は「廃棄」と「ガベージコレクション」を混同していると思います。
空の列挙型は、それを指す参照がなくなるとすぐにガベージ コレクションで使用できるようになります。

要約すると、非常にエキゾチックな列挙可能な実装を返したい場合を除いて、それについて心配する必要はありません。

于 2013-02-15T09:51:26.990 に答える