我读到《Real World Haskell》(第七章,第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
但程序运行时间几乎相同。这是正常的,还是我做错了什么?