2

を介してファイルに書き込まれる文字列のストリームを使用すると、fs2 のパフォーマンスが低下するという問題が発生しましたtext.utf8encode。パフォーマンスを向上させるためにチャンク化された文字列を使用するようにソースを変更しようとしましたが、代わりにパフォーマンスの低下が観察されました。

私が見る限り、それは次のように要約flatMapされStream.emits()ます。時間の使用は、Stream.emits() に渡されるシーケンスのサイズに基づいて指数関数的になるようです。以下のコード スニペットは例を示しています。

/*
    Test done with scala 2.11.11 and fs2 version 0.10.0-M7.
 */

val rangeSize = 20000
val integers = (1 to rangeSize).toVector

// Note that the last flatMaps are just added to show extreme load for streamA.
val streamA = Stream.emits(integers).flatMap(Stream.emit(_))
val streamB = Stream.range(1, rangeSize + 1).flatMap(Stream.emit(_))

streamA.toVector  // Uses approx. 25 seconds (!)
streamB.toVector  // Uses approx. 15 milliseconds

これはバグですか、それとも大きなシーケンスで Stream.emits() を使用するのは避けるべきですか?

4

1 に答える 1