5
當使用Haskell HDBC-ODBC庫連接到Microsoft SQL Server時,我遇到了內存泄漏問題。Haskell HDBC-ODBC內存泄漏?
import Database.HDBC
import qualified Database.HDBC.ODBC as ODBC
import Control.Monad
-- | Main application.
main :: IO()
main = dbTest
dbTest :: IO()
dbTest = do
let connStr = "DSN=TESTDB;Uid=sa;Pwd=password"
conn <- ODBC.connectODBC connStr
replicateM_ 20000 (loop conn)
disconnect conn
where
loop c = do
result <- getTables c
commit c
putStrLn $ show result
運行堆分析器給我定的內存使用情況,但窗口報告內存增加到用量的近100MB。
http://i.stack.imgur.com/YkUTW.png
對我來說,這似乎是內存泄漏的ODBC驅動程序的外部函數接口,但是這是我第一次配置代碼,所以我不能肯定。有沒有人有任何進一步的見解或建議的修復?在循環中調用System.Mem.performGC以嘗試清理不起作用。
有使用HDBC-ODBC的其他選擇嗎?如果沒有,我可能需要學習F#。
任意猜測:是否刪除了'提交C'有所作爲? – duplode
不,提交c根本沒有任何區別。同樣使用quickQuery而不是getTables會導致相同的內存泄漏。 –