Haskell HDBC-ODBC内存泄漏?

时间:2015-09-05 02:08:17

标签: haskell memory memory-leaks

使用Haskell HDBC-ODBC库连接到Microsoft SQL Server时,我遇到了错误的内存泄漏。

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

运行堆分析器为我提供了恒定的内存使用率,但Window报告内存增加到几乎100MB的使用量。

http://i.stack.imgur.com/YkUTW.png

对我来说,这似乎是ODBC驱动程序的Foreign Function接口中的内存泄漏,但这是我第一次分析代码,所以我无法确定。有没有人对修复有任何进一步的见解或建议?在循环中调用System.Mem.performGC来尝试清理没有任何效果。

使用HDBC-ODBC还有其他选择吗?如果没有,我可能需要学习F#。

1 个答案:

答案 0 :(得分:1)

问题出在hdbc-odbc库中。 Git repo提供了新版本v2.5,但hdbc库也需要修补才能工作。

this bug report提供更多详细信息。