2015-09-05 59 views
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#。

+0

任意猜測:是否刪除了'提交C'有所作爲? – duplode

+0

不,提交c根本沒有任何區別。同樣使用quickQuery而不是getTables會導致相同的內存泄漏。 –

回答

1

問題出在hdbc-odbc庫中。 Git repo提供了新版本v2.5,但是hdbc庫也需要修補才能正常工作。

更多詳情請登錄this bug report