我刚刚遇到了一个问题,即使用要写入文件的字符串流来降低 fs2 性能text.utf8encode
。我尝试更改我的源以使用分块字符串来提高性能,但观察到的是性能下降。
据我所知,它归结为以下几点: 调用flatMap
源自 from 的流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() 用于大序列?