4
"Real World Haskell"(ch. 7, 189 페이지)에서 IO 버퍼링에 대해 읽고 버퍼링 크기가 성능에 어떤 영향을 미치는지 테스트하려고했습니다.버퍼링으로 Haskell 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
하지만 프로그램 실행 시간이 거의입니다 똑같다. 정상입니까, 아니면 제가 잘못하고 계시나요?
그래서 왜 영업 이익은 자신의 프로그램에 차이의 종류를 보지 못했어요? –
OP의 프로그램은 버퍼링을 쓰기 핸들이 아닌 읽기 핸들에 설정합니다. – ErikR
댓글이 업데이트되었습니다. – ErikR