我在"真实世界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 ()
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个"bigFile.txt"
-rw-rw-r-- 1 user user 96M ???. 26 09:49 bigFile.txt
Run Code Online (Sandbox Code Playgroud)
并使用不同的缓冲区大小对此文件运行我的程序:
Current buffering …Run Code Online (Sandbox Code Playgroud)