tym*_*mym 7 zip haskell memory-leaks
我想从zip存档中的第一个文件中获取前五个字节.我使用zip-archive包进行解压缩:
import qualified Data.ByteString.Lazy as L
import Data.Maybe
import System.Environment (getArgs)
import Codec.Archive.Zip
main = do
f:_ <- getArgs
print . L.take 5 . fromEntry . head . zEntries . toArchive =<< L.readFile f
Run Code Online (Sandbox Code Playgroud)
这段代码适用于小型档案,但我有大堆溢出的堆.例如:
./zip-arch test.zip +RTS -p -hy -M100M
Run Code Online (Sandbox Code Playgroud)
我已阅读zip-archive 作者的解释并决定进行建议的修复。我已经完成了一个新的库 - zip-conduit。它的主要特点是持续的内存使用,没有惰性IO。要从 zip 存档中的第一个文件中获取前五个字节,您可以编写:
import System.Environment
import Data.Conduit
import qualified Data.Conduit.Binary as CB
import Codec.Archive.Zip
main = do
f:_ <- getArgs
res <- withArchive f $ do
name:_ <- fileNames
source <- getSource name
runResourceT $ source $$ CB.take 5
print res
Run Code Online (Sandbox Code Playgroud)