繁体   English   中英

Haskell(ghc)运行时内存使用情况或我做错了什么

[英]Haskell (ghc) runtime memory usage or what do I do wrong

我在haskell中编写了一个小程序,一种专门的HTTP服务器,它并不比下面的代码复杂得多。 令我困惑的是它的内存消耗。 比方说,当我运行一个从附带的代码编译的测试并且发出几个包含高达20Mb的整个程序的POST请求时,整个程序的VM大小将达到~800Mb,这听起来很奇怪。 如果我让这样的程序的实例空闲,这个空间不会返回给系统。

这是什么意思?


import System.IO
import Network.HTTP.Server
import Network.Socket
import Network.URL


handler :: SockAddr -> URL -> Request String -> IO (Response String)
handler sa url rq = do
  writeFile "/tmp/out" (rqBody rq)
  return $ insertHeader HdrContentLength "0" (respond OK :: Response String)

main = serverWith defaultConfig {srvPort = 2121} handler

首先,你正在使用String 这是大量数据的低效表示; 成本大约是每个字符20个字节。 您应该使用ByteString (在Data.ByteString / Data.ByteString.Char8在封装模块bytestring )来代替。

其次,GHC(包括版本6.12)不会将内存返回给操作系统。 然而,即将推出的GHC 7.0将会这样做,所以请尝试使用最新的候选版本

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM