假设我有几个200mb +文件,我想要通过.我怎么在Haskell做这个?
这是我的初始计划:
import Data.List
import Control.Monad
import System.IO
import System.Environment
main = do
filename <- liftM head getArgs
contents <- liftM lines $ readFile filename
putStrLn . unlines . filter (isPrefixOf "import") $ contents
Run Code Online (Sandbox Code Playgroud)
这会在解析之前将整个文件读入内存.然后我去了:
import Data.List
import Control.Monad
import System.IO
import System.Environment
main = do
filename <- liftM head getArgs
file <- (openFile filename ReadMode)
contents <- liftM lines $ hGetContents file
putStrLn . unlines . filter (isPrefixOf "import") $ contents
Run Code Online (Sandbox Code Playgroud)
我以为既然hGetContents很懒,就会避免将整个文件读入内存.但是,运行这两个脚本valgrind显示两者的内存使用量相似.所以要么我的脚本错了,要么 …
haskell ×1