하스켈에서 많은 양의 데이터를 읽는 데 [Char]
을 사용하지 않는 것은 일반적인 사실입니다. 하나는 ByteString
을 사용하여 작업을 수행합니다. 이것에 대한 일반적인 설명은 Char
이 크고 목록이 오버 헤드를 추가한다는 것입니다.[Char] 기반 입력이 Haskell의 [Char] 기반 출력보다 훨씬 느린 이유는 무엇입니까?
그러나 출력에 문제가없는 것으로 보입니다. 첫 번째 프로그램의 출력을 공급하는 경우
import Data.List
sum' :: [Int] -> Int
sum' = foldl' (+) 0
main = interact $ show . sum' . map read . words
가 3.38 초 정도 걸립니다 : 예를 들어
다음 프로그램 : 한 다음 동안
main = interact $ const $ unwords $ map show $ replicate 500000 38000000
내 컴퓨터에서 실행 단지 131 밀리 초 소요 입력으로!
String
을 사용하여 입력 성능과 출력 성능 사이에 이러한 불일치가 발생하는 이유는 무엇입니까?
내 빠른 프로파일 링은 입력 프로그램이 출력 프로그램보다 13 배 많은 메모리를 할당한다는 것을 보여줍니다. 이것은 분명히 불균형에 기여합니다. –