【发布时间】:2011-11-22 12:43:26
【问题描述】:
众所周知,在 Haskell 中不使用[Char] 读取大量数据。一个人使用ByteStrings 来完成这项工作。
通常对此的解释是 Chars 很大,列表会增加开销。
但是,这似乎不会导致输出出现任何问题。
例如下面的程序:
main = interact $ const $ unwords $ map show $ replicate 500000 38000000
在我的电脑上运行仅需 131 毫秒,而以下:
import Data.List
sum' :: [Int] -> Int
sum' = foldl' (+) 0
main = interact $ show . sum' . map read . words
如果将第一个程序的输出作为输入,则需要 3.38 秒!
使用Strings 的输入和输出性能出现这种差异的原因是什么?
【问题讨论】:
-
我的快速分析显示输入程序分配的内存是输出程序的 13 倍。这肯定会造成差距。
标签: string performance haskell io