【发布时间】:2015-01-26 07:15:11
【问题描述】:
我在“Real World Haskell”(第 7 章,第 189 页)中阅读了有关 IO 缓冲的内容,并尝试测试不同的缓冲大小如何影响性能。
import System.IO
import Data.Time.Clock
import Data.Char(toUpper)
main :: IO ()
main = do
hInp <- openFile "bigFile.txt" ReadMode
let bufferSize = truncate $ 2**10
hSetBuffering hInp (BlockBuffering (Just bufferSize))
bufferMode <- hGetBuffering hInp
putStrLn $ "Current buffering mode: " ++ (show bufferMode)
startTime <- getCurrentTime
inp <- hGetContents hInp
writeFile "processed.txt" (map toUpper inp)
hClose hInp
finishTime <- getCurrentTime
print $ diffUTCTime finishTime startTime
return ()
然后我创建了一个“bigFile.txt”
-rw-rw-r-- 1 user user 96M янв. 26 09:49 bigFile.txt
并针对这个文件运行我的程序,使用不同的缓冲区大小:
Current buffering mode: BlockBuffering (Just 32)
9.744967s
Current buffering mode: BlockBuffering (Just 1024)
9.667924s
Current buffering mode: BlockBuffering (Just 1048576)
9.494807s
Current buffering mode: BlockBuffering (Just 1073741824)
9.792453s
但是程序运行时间几乎是一样的。这是正常的,还是我做错了什么?
【问题讨论】:
标签: performance haskell io buffering